循环中的Jquery来执行记录的一些计算

时间:2016-02-18 09:37:07

标签: javascript php jquery

我试图使用php带来一些记录并进行一些计算。我现在正在做的是,每行都有不同货币的下拉列表。当我选择每种货币时,它会计算并显示某些值。直到这里工作正常。

我想要实现的是,如果我选择第一个货币下拉列表,它应该计算完整的记录计算,而不是选择每行的货币。我想我需要在计算行的jquery中做一些循环。

Fiddle

以下是货币下拉列表的jquery脚本的一部分。

$(window).load(function() {
  $(document).ready(function() {
    $("select").on('change', function() {

      var dept_number = $(this).val();
      var price = $(this).find(':selected').data('price');
      var selected = $(this).find('option:selected').text();

      if (selected == "INR") {
        $(this).closest('table').find('.total1').val($(this).closest('table').find('.total').val());
      } else {
        $(this).closest('table').find('.total1').val((($(this).closest('table').find('.total').val() * price) / $(this).closest('table').find('.inrvalue').val()).toFixed(3));
      }

      $(this).closest('table').find('.price_unit').val(($(this).closest('table').find('.total1').val() / $(this).closest('table').find('.qty').val()).toFixed(3));

    });
  });
});

我想我需要在这个jquery中添加一些循环。任何人都可以指导我如何做到这一点。或者我需要采取不同的步骤。

这是我根据Leonix的建议尝试过的。

$(document).ready(function(){
            $(this).closest('table').find("select").each(function() {
               var dept_number = $(this).val();
               var price = $(this).find(':selected').data('price');

                var selected = $(this).find("select");

           if(selected=="INR")
            {
               $(this).closest('table').find('.total1').val($(this).closest('table').find('.total').val());

            } else
            {

           $(this).closest('table').find('.total1').val((($(this).closest('table').find('.total').val() * price) / $(this).closest('table').find('.inrvalue').val()).toFixed(3));
           }

               $(this).closest('table').find('.price_unit').val(($(this).closest('table').find('.total1').val()/$(this).closest('table').find('.qty').val()).toFixed(3));

           });
           });

1 个答案:

答案 0 :(得分:1)

在您的选择更改功能中,为表格的所有行执行各项操作并找到下拉列表:

$(this).closest('table').find("select").each(function() {
    /* Each SELECT here, use $(this) */
})

或者,根据您的需要:

$(this).closest('table').find("select").each(function() {
    /* Each TR here, use selectInput */
    var selectInput = $(this).find("select");
})

使用select in hands,使用selectInput.val(changedSelectInput.val()) changedSelectInput是包含select更改者的jquery对象 使用嵌套的匿名函数时要注意,它们是在对象上下文中执行的,所以这个和$(this)会根据受函数影响的对象而改变。

建议:使用JS的特定css类作为select.select-currency而不是select,将这些类放在代码中。它可以防止这么多错误并节省你的时间。

注意:currency_change []不是有效的ID,如果你不需要设置一个,不要。

修改

部分代码:https://jsfiddle.net/btpxq5ow/6/
我做了什么?

  1. 修复代码问题
  2. 修复tbody问题中的输入,切勿直接将其放在tr,tbody,table中。
  3. 修复一些缩进问题
  4. 将货币更改应用于所有行
  5. 防止更改事件以无限循环调用自身
  6. 更新时将计算应用于所有行
  7. 修复一些代码语法&绩效问题
  8. 请检查您的计算是否正确,因为我修改了它,请参阅calculateRowTotals() 还有一些必须修复的html / js错误。

    您很少从stackoverflow获取代码