在Yii中进行计算仅采用手动插入的值

时间:2012-09-17 06:06:03

标签: php jquery yii yii-events

我正在Yii写一个小型发票申请表。我的模型databaseitemitem database就是这样的

  +++++++++++++++++
  |  InvoiceItems |
  +++++++++++++++++
  +      id       +
  +      name     +
  +  description  +
  +    unit_cost  +
  +    quantity   +
  +    tax        +
  +    total      +
  +++++++++++++++++

现在,在item model中,我创建了一个下拉列表,我在Ajax中使用unit_cost, quantity, tax等获取所有项目名称。为了执行total,我的业务逻辑为:

  1. unit_cost将乘以quantity
  2. 税收将被添加到总数中。
  3. 最终应该在total文件的_form.php字段中弹出总计。
  4. 为了计算,我写了这个jQuery脚本:

    <script type="text/javascript">
    jQuery(document).ready(function(){
      jQuery("#InvoiceItems_unit_cost, #InvoiceItems_quantity, #InvoiceItems_tax").on('keyup',function(event){
        var subtotal = jQuery("#InvoiceItems_quantity").val() * jQuery("#InvoiceItems_unit_cost").val();
        var total = subtotal + (subtotal  * jQuery("#InvoiceItems_tax").val() / 100);
        jQuery("#InvoiceItems_total").val(total);
      });
    });
    </script>
    

    当我手动插入值时,这工作正常,但是当值来自数据库时它不起作用。我完全陷入困境。

    更新

    当我试图通过firefox的控制台选项卡中的ajax从数据库中获取值时,console.log("#InvoiceItems_quantity").val()就显示了an empty string。 Ajax代码以json

    的形式从数据库中获取数据
            <?php echo $form->dropDownList($customers,'customer_name',CMap::mergeArray(CHtml::listData(Customers::model()->findAll(), 'customer_name',       'customer_name'
            ),
            array(
            'empty'=>array('Select'=>'- - Choose One - -'),
            'id'=>'Customers_name',
            'ajax'=> array(
                'type'=>'GET',
                'id'=>'abc',
                'url'=>$this->createUrl('Invoices/customerdetails'),// action that will generate the data
                'data'=>'js:"customer_name="+$(this).val()',// this is the data that we are sending to the action in the controller
                'dataType'=>'json',// type of data we expect back from the server
                'success'=>'js:updateFieldsCustomers',// a javascript function that will execute when the request completes
                'beforeSend'=>'js:function(){
                    if($("#Customers_name").val() == "create_customer_link") {
                        addCustomers();
                        $("#dialogCustomers").dialog("open");
                        return false;
                    }
                }',
            ),
            'options'=>array(
                'create_customer_link' => array('class'=>'create-link'),
            )
        )
    );?>
    
       <?php
      Yii::app()->clientScript->registerScript('update','
      function updateFieldsCustomers(data, textStatus, jqXHR){
      // select each input field by id, and update its value
      $("#InvoiceItems_unit_cost").val(data.unit_cost);
      $("#InvoiceItems_quantity").val(data.quantity);
      $("#InvoiceItems_discount").val(data.discount);
      // similarly update the fields for the other inputs
      }
    ');
      ?>
    

    最近更新

    当我尝试console.log("#InvoiceItems_quantity").val()时,我看到它显示了更改后该字段的实际值。表示选择一个值时,它显示控制台面板中先前输入值的值。我认为这一切都有效,因为我使用了on change函数,但当我使用.select时,它根本不工作。在控制台面板中没有显示任何值。

2 个答案:

答案 0 :(得分:1)

我得到了这个问题的解决方案。它应该是这样的

<script type="text/javascript">
jQuery(document).ready(function(){
  jQuery("#Product_name").ajaxComplete(function(event,request,settings){
    var subtotal = jQuery("#InvoiceItems_quantity").val() * jQuery("#InvoiceItems_unit_cost").val();
    var total = subtotal + (subtotal  * jQuery("#InvoiceItems_tax").val() / 100);
    jQuery("#InvoiceItems_total").val(total);
  });
});
</script>

答案 1 :(得分:0)

试试这个

    <script type="text/javascript">
    jQuery(document).ready(function(){
      jQuery("#Items_unit_cost, #Items_quantity, #Items_discount").on('keyup',calculate_total);

     function calculate_total(){
           var subtotal = jQuery("#Items_quantity").val() * jQuery("#Items_unit_cost").val();
           var total = subtotal + (subtotal  * jQuery("#Items_discount").val() / 100);
           jQuery("#Items_total").val(total);
         }

calculate_total();

    });

    </script>