0

私はYiiフレームワークの初心者で、小さなWebプロジェクトで学び始めたので、それを解決する方法としてこの立場に固執しました。

ユーザーが注文を確認した「Order_form」があります。「数量」を変更したい場合は、これだけを変更できます。これを行うことで、数量が変更された場合に同じフォームでオンザフライで計算される合計値を変更する必要があります。ユーザー。

beginWidget('CActiveForm'、array('id' =>'order-form'、'enableAjaxValidation' => false、)); ?>
<div class="row">
        <?php echo $form->labelEx($model,'price'); ?>
        <?php echo $model->price; ?>
</div>

<div class="row">
        <?php echo $form->labelEx($model,'qty'); ?>
        <?php echo $form->textField($model,'qty'); ?>
        <?php echo $form->error($model,'qty'); ?>
</div>

<div class="row">
        <?php echo $form->labelEx($model,'total'); ?>
        <?php echo $form->textField($model,'total'); ?>
</div>

endWidget(); ?>

$(document).ready(function(){var myVar = '999'; $( "#model_total")。val(myVar);}); '

ここでは、必要なものを明確にするためにスクリプトを更新したので、同じフォームで「999」の値を「Total」に渡そうとしていますが、これは機能しません。それは私が行方不明/何か間違ったことをしている可能性があります。

数量x価格を計算し、可能であればコントローラーから結果を取得する別の方法も希望します。可能な場合は、コードをガイドしてください。

4

1 に答える 1

0

JSが機能していない可能性がある理由の1つは、「合計」フィールドIDが「model_total」であることを確認していますか?通常は「Order_total」のようなものです。HTMLソースを調べて確認します(Firebugが役立ちます)。

とにかく、他のいくつかの提案:

この注文合計の問題を解決する一般的な方法は、[カートの更新]ボタンです。このボタンは、注文合計が計算されるコントローラーにフォームをPOSTして戻し、ページが新しい合計で再度レンダリングされます。

これを行う別の方法は、2つのことのいずれかを実行するonBlur live()(またはデリゲート)リスナーを設定することです(現在試していることと同様)。

(1)合計が再計算されるコントローラーにフォームをPOSTします。このようなもの(テストされていない):

$("#order-form #Order_qty").live('blur',function() {
  $.ajax({
    'type':'POST',
    'data':$('#order-form').serialize(),
    'success':function(data){$('#Order_total').val(data)}
  });}
);

コントローラアクションには、次のようなものが必要です。

if(isset($_POST['ajax']) && $_POST['ajax']==='order-form' && isset($_POST['Order'])) {
  // calculate new total based on the $_POST Model_qty field
  echo $new_total;
  Yii::app()->end();
}

(2)JSで完全に計算を行い、今やろうとしているように更新することができます。この方法でデータベースの注文数量を更新することはできません。コントローラーにアクセスしていないことを忘れないでください。

$("#order-form #Order_qty").live('blur',function() {
  $('#Order_total').val($('#Order_price').val() * $('#Order_qty').val());
});
于 2010-09-16T21:31:50.280 に答える