2

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

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

现在,在item model我制作了一个下拉列表中,我unit_cost, quantity, tax在 Ajax 中获取所有项目名称及其等。为了做到这一点total,我的业务逻辑如下:

  1. unit_cost将乘以quantity
  2. 然后税收将被添加到总数中。
  3. 总数最终应该会出现在文件的total字段中_form.php

为了计算,我写了这个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>

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

更新

当我试图通过 ajax 在 Firefox 的控制台选项卡中从数据库中获取后查看值时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它时,它根本不起作用。控制台面板中没有显示任何值。

4

2 回答 2

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>
于 2012-10-01T13:49:12.947 回答
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>
于 2012-09-17T06:40:13.787 回答