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 的原因之一是:您确定“total”字段 ID 是“model_total”吗?通常它类似于“Order_total”。查看您的 html 源代码以进行验证(Firebug 有帮助)。

无论如何,还有一些其他建议:

解决此订单总额问题的常用方法是使用“更新购物车”按钮,该按钮将表单发送回计算订单总额的控制器,然后使用新的总额再次呈现页面。

另一种方法是设置一个 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());
});
于 2010-09-16T21:31:50.280 回答