Yii framework .... Рассчитать сумму на лету - PullRequest
0 голосов
/ 16 сентября 2010

Я новичок в фреймворке Yii и начинаю изучать небольшой веб-проект, поэтому я застрял на этой позиции, как ее решить.

У меня есть «Order_form», где пользователь должен подтвердить свой заказ, и если вы хотите изменить «Кол-во», так что только это может измениться, то с помощью этого мне нужно изменить Общее значение, которое будет вычисляться на лету в той же форме, если Qty изменено пользователем.

beginWidget ('CActiveForm', массив ( 'ID' => 'порядок-форма', 'EnableAjaxValidation' => ложно, )); ?>
<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 (); ?>

$ (документ) .ready (function () { var myVar = '999'; $ ( "# Model_total") Вал (MYVAR). }); «

Здесь я обновил свой сценарий, чтобы уточнить, что мне нужно, поэтому здесь я пытаюсь передать значение «999» в «Всего» в той же форме, но это не работает. Возможно, я что-то упускаю / делаю что-то не так.

Я также хотел бы использовать другой способ вычисления Qty x Price и получения результата от контроллера, если это возможно, если это возможно, пожалуйста, ознакомьтесь с кодом.

1 Ответ

0 голосов
/ 17 сентября 2010

Одна из причин, по которой у вас может не работать JS, заключается в следующем: вы УВЕРЕНЫ, что ИД поля "total" равен "model_total"?Обычно это что-то вроде "Order_total".Посмотрите на ваш источник HTML для проверки (Firebug помогает).

В любом случае, есть и другие предложения:

Распространенным способом решения этой общей проблемы заказа является кнопка «Обновить корзину», которая выдает POSTобратно в контроллер, где вычисляется общая сумма заказа, а затем страница отображается снова с новым итогом.

Еще один способ сделать это - настроить прослушиватель 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,и обновить его, как вы пытаетесь сделать сейчас.Просто помните, что вы не можете обновить порядок qty в базе данных таким образом, если вы не попали в контроллер.

$("#order-form #Order_qty").live('blur',function() {
  $('#Order_total').val($('#Order_price').val() * $('#Order_qty').val());
});
...