首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实时计算JQuery

实时计算JQuery
EN

Stack Overflow用户
提问于 2018-08-30 15:32:55
回答 1查看 1K关注 0票数 2

我试着做实时计算,但这对我不起作用。我避免使用id选择器在多个窗体上应用相同的代码

代码语言:javascript
复制
function OgKeyPress() {
  var amount = $(this);
  var s = amount.value;
  var tax = $(this).closest("table").find("tr td div").first().find("p input");
  var total = $(this).closest("table").find("tr td div").last().find("p input");

  var t = tax.value = (1 / 10).toFixed(1);
  total.value = Number(s) + Number(t);
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <table>
    <div>
      <input type="text" onKeyPress="OgKeyPress()" onKeyUp="OgKeyPress()" name="amount">
    </div>
    <tr>
      <td>
        <div>
          <b>tax</b>
          <p>
            <input name="tax" type="text" readonly="readonly">
          </p>
        </div>
        <div>
          <b>total</b>
          <p>
            <input name="sum" type="text" readonly="readonly">
          </p>
        </div>
      </td>
    </tr>
  </table>
</form>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-30 15:58:30

你这里有几个问题。首先,主要问题在于HTML是无效的;不能将div作为table的子节点。它需要在trtdth中。这就是为什么closest()不起作用的原因,因为渲染器正在将div移出表之外,以使HTML有效。

您还声明您不希望使用id属性,因为这个HTLM结构是重复的,这很好,可以使用class属性。然后,您可以为所有这些元素组合相同的功能,而不必重复您的JS。

您还不应该使用on*内联事件处理程序。除了大量过时之外,它们没有保留引发元素的元素的范围,因此this引用很可能是window,从而导致计算逻辑出现问题。要解决这个问题,请使用不引人注目的事件处理程序,例如jQuery的on()input事件,这也涵盖了用鼠标粘贴内容。

说了这么多,试试这个:

代码语言:javascript
复制
$(function() {
  $('.amount').on('input', function() {
    var $amount = $(this);
    var $table = $amount.closest('table');
    var $tax = $table.find(".tax");
    var $total = $table.find(".total");

    var tax = parseFloat((1 / 10).toFixed(1));
    $tax.val(tax);
    $total.val(parseFloat($amount.val()) + tax);
  });
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <table>
    <tr>
      <td>
        <input type="text" name="amount" class="amount">
      </td>
    </tr>
    <tr>
      <td>
        <div>
          <b>tax</b>
          <p>
            <input name="tax" type="text" class="tax" readonly="readonly">
          </p>
        </div>
        <div>
          <b>total</b>
          <p>
            <input name="sum" type="text" class="total" readonly="readonly">
          </p>
        </div>
      </td>
    </tr>
  </table>
</form>

最后一个注意事项是,tax计算是硬编码到0.1中的,因此当您只需将0.1添加到用户的输入时,逻辑看起来有点过于复杂。我将假设这是一项正在进行的工作,而且税率是可变的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52100719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档