質問

私はYiiフレームワークの初心者で、小さなWebプロジェクトで学習を開始しているので、それを解決する方法としてこのポジションにとどまりました。

ユーザーが注文を確認している「注文_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」の値を「合計」に渡そうとしていますが、これは機能しません。それは私が足りない/何か間違ったことをしているということかもしれません。

また、他の方法でQty Xの価格を計算し、これが可能な場合はコントローラーから結果を取得したいと思います。もしそうなら、コードをガイドしてください。

役に立ちましたか?

解決

JSが機能していない理由の1つは、「合計」フィールドIDが「Model_Total」であると確信していますか?通常、それは「Order_Total」のようなものです。 HTMLソースを確認して確認します(FireBugが役立ちます)。

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

この注文の合計問題を解決する一般的な方法は、「カートの更新」ボタンです。このボタンは、フォームをコントローラーに戻し、順序合計が計算され、次に新しい合計で再びレンダリングされます。

これを行うもう1つの方法は、2つのことのいずれかを実行するOnblur live()(または委任)のリスナーをセットアップすることです(あなたが今試していることと同様)。

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

$("#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());
});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top