質問
私は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());
});