【问题标题】:Use JQuery to multiply values from dynamically created input fields使用 JQuery 将动态创建的输入字段中的值相乘
【发布时间】:2016-02-03 13:15:20
【问题描述】:

我正在使用 JQuery 来动态创建表行。每行包含 3 个文本字段。当用户在文本字段中键入时,表格行被克隆,并根据需要添加多行。一切正常。

数值被输入到前 2 个字段中,它们相乘。输出自动出现在第三个文本框中。由于输入字段是克隆,我不能使用 getElementById 来运行函数并将值相乘。

有人告诉我使用onchange 使用父兄弟姐妹,但我不知道该怎么做。谁能举个例子?

这是我在 JS Fiddle 中的代码示例:https://jsfiddle.net/mzctb778/

【问题讨论】:

    标签: javascript jquery parent siblings


    【解决方案1】:

    由于您是动态添加内容,因此您应该使用事件委托来侦听更改事件。通过将其附加到桌子上来做到这一点。所以听一下输入的变化。检测到更改后,通过查找 DOM 获取行并选择需要相乘的输入。由于 id 必须是唯一的,因此您不能使用它们,因此请使用类来引用元素。

    $("table").on("change", "input", function () {  //use event delegation
      var tableRow = $(this).closest("tr");  //from input find row
      var one = Number(tableRow.find(".one").val());  //get first textbox
      var two = Number(tableRow.find(".two").val());  //get second textbox
      var total = one * two;  //calculate total
      tableRow.find(".three").val(total);  //set value
    });
    
    $("button.add").on("click", function() {
       var tbody = $("table tbody");
       tbody.find("tr:eq(0)").clone().appendTo(tbody).find("input").val("");
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <table>
      <tbody>
        <tr>
          <td><input class="one" /></td>
          <td><input class="two" /></td>
          <td><input class="three" readonly="readonly"/></td>
        </tr>
      </tbody>
    </table>
    
    <button class="add">Add</button>

    【讨论】:

    • 那么你现在有什么问题试图让我所做的事情适应你的问题?我不会做你所有的工作。
    • 嗨,你的代码对我非常有用,谢谢,你能解释一下如何对所有 class="three" 求和吗?并显示
    【解决方案2】:

    将此添加到您的脚本中,它将执行您想要的计算:

    $("table select").on("change", function(){
    var x=$(this).find(":selected").val();
    var y=$(this).closest("td").siblings().find(":selected").val();
    $(this).closest("td").siblings().find("input").val(x*y);
    });
    

    New JS Fiddle

    【讨论】:

    • 从前 2 个字段中获取值并将它们相乘。会更容易看到他的代码。
    • 当然,但老实说,你不应该尝试回答一个问得如此糟糕的问题,因为这不可能给出相关的答案
    • 很公平。认为看到 on 功能可能对他来说就足够了。
    • 一个 JS Fiddle 已经发布,请随时修改您的答案。 (我没有投反对票)
    • 谢谢,我现在更新了答案。它按照要求进行。
    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多