【问题标题】:Adding two input boxes values with multiple input fields not working in jQuery添加具有多个输入字段的两个输入框值在 jQuery 中不起作用
【发布时间】:2022-01-13 09:40:06
【问题描述】:

我有一个网站,其中有一个表单,其中有一个如下所示的输入字段。如您所见,我正在尝试添加两个输入框以获取第三个输入框的值,但这仅适用于第一组输入框,其余输入框将出现故障或第一组的值。我该如何解决这个问题?

$(document).ready(function() {
  $(".value2").keyup(function() {
    var val1 = +$(".value1").val();
    var val2 = +$(".value2").val();
    $(".result").val(val1 * val2);
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<input name="quantity[]" type="text" class="form-control value1">
<input name="rate[]" type="text" class="form-control value2">
<input name="amount[]" type="text" class="form-control result">

<input name="quantity[]" type="text" class="form-control value1">
<input name="rate[]" type="text" class="form-control value2">
<input name="amount[]" type="text" class="form-control result">

<input name="quantity[]" type="text" class="form-control value1">
<input name="rate[]" type="text" class="form-control value2">
<input name="amount[]" type="text" class="form-control result">

【问题讨论】:

    标签: javascript html jquery input


    【解决方案1】:

    包装在容器中并从您更新的元素的父 div 委托

    这里的数据是相对于你更新的字段

    注意:添加一个带有 ID 的主容器,并将每个集合包装在 div 中

    $(document).ready(function() {
      $("#container").on("input",".form-control", function() {
        const $parent = $(this).closest("div.item")
        var val1 = +$(".value1", $parent).val();
        var val2 = +$(".value2", $parent).val();
        $(".result", $parent).val(val1 * val2);
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <div id="container">
    <div class="item">
      <input name="quantity[]" type="text" class="form-control value1">
      <input name="rate[]" type="text" class="form-control value2">
      <input name="amount[]" type="text" class="form-control result">
    </div>
    <div class="item">
      <input name="quantity[]" type="text" class="form-control value1">
      <input name="rate[]" type="text" class="form-control value2">
      <input name="amount[]" type="text" class="form-control result">
    </div>
    <div class="item">
      <input name="quantity[]" type="text" class="form-control value1">
      <input name="rate[]" type="text" class="form-control value2">
      <input name="amount[]" type="text" class="form-control result">
    </div>
    </div>

    【讨论】:

    • 我试过了,我在最终框中没有得到任何价值
    • 如您所见,它在这里有效。您可能没有复制完整的解决方案(容器上的 ID,每个集合在单独的容器中)
    • 我们可以将最接近的 div 作为一个类吗?
    • 当然。给它一个类并做最接近(“.classNameOfContainer”)
    • 它不工作
    【解决方案2】:

    问题在于,当您在包含元素集合的 jQuery 对象上调用 val() 以及其他 jQuery 方法时,它仅针对该集合中的第一个元素进行评估。

    要解决您的问题,您可以使用 jQuery 的 DOM 遍历方法将 DOM 中的相关元素检索到引发事件的元素。在这种情况下,prev()next()

    jQuery($ => {
      $(".value2").on('input', e => {
        let $val2 = $(e.target);
        let val1 = +$val2.prev(".value1").val() || 0;
        let val2 = +$val2.val() || 0;
        $val2.next(".result").val(val1 * val2);
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <input name="quantity[]" type="text" class="form-control value1">
    <input name="rate[]" type="text" class="form-control value2">
    <input name="amount[]" type="text" class="form-control result">
    
    <input name="quantity[]" type="text" class="form-control value1">
    <input name="rate[]" type="text" class="form-control value2">
    <input name="amount[]" type="text" class="form-control result">
    
    <input name="quantity[]" type="text" class="form-control value1">
    <input name="rate[]" type="text" class="form-control value2">
    <input name="amount[]" type="text" class="form-control result">

    请注意,在上面的示例中,input 的使用超过了keypress,这样当用户使用鼠标向input 添加内容时,该逻辑也可以工作。另请注意使用|| 0NaN 值强制为0

    【讨论】:

    • 我试过了,但我在最终输入框中没有得到任何值
    • 在这种情况下,我假设您没有在页面中包含 jQuery.js(因为我必须将其添加到示例中)或者您在问题中提供的 HTML 不一样就像在您的本地环境中一样,示例工作正常。您能否使用正确的 HTML 编辑问题。
    • 您确定这是正确的代码吗?这没有问题中提供的名称的输入,并且它们都没有在列中......?
    • 是的,它实际上有一个添加更多按钮,当你点击添加更多按钮时,它会继续添加字段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    相关资源
    最近更新 更多