【问题标题】:Cascading onchange calculation in javascriptjavascript中的级联onchange计算
【发布时间】:2014-10-26 17:15:07
【问题描述】:

我有材料清单和每种材料的费率。当用户输入材料的数量时,onchange 事件会触发并将材料成本计算为费率*数量。这是我能够做到的。我也想要所有材料成本的总和。我可以通过在 onchange 中添加另一个 javascript 函数作为 onchange="mymultiply(100, 'rate_1','quantity_1');mysummation('cost_1','cost_2',...,'sum_cost')" 来做到这一点。但是如何级联呢?

我希望在数量_1/数量_2 等中的 onchange 更改只读值(cost_1/cost_2 等)时触发 javascript 函数。onchange 仅适用于用户输入。有没有解决办法。

所以示例表单看起来像这样。

<table>
<tr><th>material</th><th>rate</th><th>quantity</th><th>cost</th></tr>
<tr>
  <td>Material 1</td>
  <td><input type='text' id='rate_1' readonly='true' value='100' /></td>
  <td><input type='text' id='quantity_1' onchange="mymultiply('rate_1','quantity_1','cost_1');" /></td>
  <td><input type='text' id='cost_1' readonly='true' onchange="mysummation('cost_1','cost_2','cost_3','sum_cost');" /></td>
</tr>
<tr> Row 2 data</tr>
<tr> Row 3 data</tr>
</table>

<input type='text' id='sum_cost' readonly='true' />

Javascript 看起来像这样......

function mymultiply(rate, quantity, cost){
  document.getElementById(cost).value=document.getElementById(quantity).value*document.getElementById(rate).value;
}

function mysummation(cost_1, cost_2, cost_3, sum){
  document.getElementById(sum).value=document.getElementById(cost_1).value+document.getElementById(cost_2).value+document.getElementById(cost_3).value;
}

【问题讨论】:

  • 你的 javacsript 在哪里?
  • 什么是cost_1,cost_2...?
  • 成本为费率*数量。在上述情况下,cost_1 输入元素将包含数量_1*100。同样 cost_2 等。
  • onchange 事件仅在用户输入内容时发生。问题更多是关于当只读输入中的值被其他一些 javascript 函数(mymultiply)更改时如何触发 javascript 函数(mysummation)。
  • sum_cost 将是通过添加所有成本的总成本。因此 sum_cost=cost_1+cost_2+cost_3。

标签: javascript html


【解决方案1】:

你可以试试吗

脚本

    <script>

    function mymultiply(quantity){
       var rate1=document.getElementById('rate_1').value;
       document.getElementById('cost_1').value= parseInt(quantity)*parseInt(rate1);
       document.getElementById('cost_2').value= parseInt(quantity)*200;
       document.getElementById('cost_3').value= parseInt(quantity)*300;
       document.getElementById('sum_cost').value= parseInt(document.getElementById('cost_1').value)+parseInt(document.getElementById('cost_2').value)+parseInt(document.getElementById('cost_3').value);
    }

    </script>

HTML

    <table>
    <tr><th>material</th><th>rate</th><th>quantity</th><th>cost1</th><th>cost2</th><th>cost3</th></tr>
    <tr>
      <td>Material 1</td>
      <td><input type='text' id='rate_1' readonly='true' value='100' /></td>
      <td><input type='text' id='quantity_1' onKeyUp="mymultiply(this.value);" /></td>
      <td><input type='text' id='cost_1' readonly='true' /></td>
      <td><input type='text' id='cost_2' readonly='true' /></td>
      <td><input type='text' id='cost_3' readonly='true' /></td>
    </tr>
    <tr> Row 2 data</tr>
    <tr> Row 3 data</tr>
    </table>

    Totla Value<input type='text' id='sum_cost' readonly='true' />

我想你想从另一个函数触发一个函数试试这个

$(selector).trigger("change"); 

当你调用它时

 function mymultiply(rate, quantity, cost){
   mysummation('100', '200', '300', '600');//call another function also
 }

【讨论】:

  • 我知道这会很好。我刚刚发布了上述问题作为示例。它可以通过多种方式解决,包括您发布的方式。我想知道,是否可以级联。准确地说,当用户输入quantity_1时,javascript函数mymultiply在元素quantity_1内触发。我的乘法函数。更改 cost_1 元素内的值。当 cost_1 更改时,javascript 函数 mysummation 会自动触发。以上只是一个例子。问题是如何级联或发生连锁反应?
  • 用户可以更改 cost_1 的值吗?
  • 我认为 $(selector).trigger("change");将解决我的问题。你能更具体一点,因为我是 jquery 的新手
  • 我要给我一份样品吗?那你可以继续你原来的吗?
  • 所以我做了这样的事情 $("#cost_1").change(function(){$(this).trigger("summation_2");});我知道我可能在这里做错了。
猜你喜欢
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
相关资源
最近更新 更多