jQuery 如何检测文本输入框的变化

How to Detect Change in a Text Input Box in jQuery

我有两个文本输入文本框,我想对用户未输入的内容进行总计。下面是我的代码:

$(document).ready(function(){
    var total = 0;
    $(".test").on("input", function(){
        // Print entered value in a div box
        total += parseInt($(this).val());
        $("#result").text( total);
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p><input type="text" class="test" placeholder="Type something..." id="myInput"></p>
    <p><input type="text" class="test" placeholder="Type something..." id="myInput"></p>
    <div id="result"></div>

当我先输入 10 然后它需要 11,然后如果我输入 100 然后它需要 111,我不明白为什么会这样。我哪里出错了,指导一下?

在您的代码中,当您输入第一位数字时,由于您的代码 total += parseInt($(this).val()),它已被计算为总数。例如,如果您按第一个数字为 1,那么此时总计将更新为 total = total + 1,等于 1,例如,在第二次按键时取 0,则您的输入值变为 10。它正在计算当前总值为 total = total + 10。这就是为什么你得到 11 作为答案

这样试试。

$(document).ready(function(){
$(".test").on("input", function(){
    let total = 0;
    $('.test').each(function() {
      if (!isNaN(parseInt($(this).val()))) {
        total += parseInt($(this).val());
      }
    });
    $("#result").text(total);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p><input type="text" class="test" placeholder="Type something..." id="myInput1"></p>
<p><input type="text" class="test" placeholder="Type something..." id="myInput2"></p>
<div id="result"></div>

使用更改事件而不是输入事件。它只会在值为 "commited" 时触发,而不是每次击键时触发。有关详细信息,请参阅 mdn

它没有显示您想要的结果的原因是计算错误。现在,每当一个输入字段发生变化时,您就将该数字添加到总数中。因此,如果您键入 123,它需要 0 + 1,然后是 1 + 12,然后是 13 + 123,所以您将得到 136 作为结果。

我为你的问题写了一个可能的解决方案。代码在下面的fiddle

您可以添加一个函数来计算所有输入字段的总数(可能超过 2 个,这是通用的)。

function calculateTotal(){
  var total = 0;
    $(".test").each(function( index ) {
      var value = $(this).val();
      if(value == ""){
        return;
      }
      total += parseInt(value);

    });
  $("#result").text(total);
}

在更改输入字段时,您只需执行该函数即可。

$(document).ready(function(){
    $(".test").on("input", function(){
        calculateTotal();
    });
});

你的例子在这个fiddle中:https://jsfiddle.net/xL6hgder/2/

您只需使用要更改的输入值更新总计。

要获得两个输入值的总和,您必须取两个值并将其与总和相加。

试试下面的代码-

$(document).ready(function() {
  $(".test").on("change", function() {
    var total = 0;
    $('.test').each(function() {
      if (!isNaN(parseInt($(this).val()))) {
        total += parseInt($(this).val());
      }
    });
    // Print entered value in a div box

    $("#result").text(total);
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p><input type="text" class="test" placeholder="Type something..." id="myInput"></p>
<p><input type="text" class="test" placeholder="Type something..." id="myInput"></p>
<div id="result"></div>

 $(document).ready(function () {
        $(".test").on('input', function () {
            var total = parseInt($("#result").text());
            total = parseInt($("#myInput").val()) + parseInt($("#myInput1").val());
            $("#result").text(total);
        });
    });

 <p><input type="text" class="test" placeholder="Type something..." id="myInput" /></p>
    <p><input type="text" class="test" placeholder="Type something..." id="myInput1" /></p>
    <div id="result"></div>