2015-02-11 59 views
2

我有一个页面上有多个表单&我很难从每个表中获取值以提供总计。 HTML是动态生成的&我无法修改它。以下是各形式的样子(但他们会每次运行它的时候有不同的行数....将jquery选择限制为特定形式

<form> 
<input type=number class="entries" onchange="addTotal();"> 
<input type=number class="entries" onchange="addTotal();"> 
<input type=number class="totals"> 
</form> 

这里是我不得不添加各种形式&把总计功能在“总计”框。这对于第一种形式的伟大工程,但问题是无论哪个形成我输入值,它总计一切都在最佳状态“总计”。

function addTotal() { 
    var entry = $('.entries').get(); 
    var total = 0; 
    for (var i = 0; i < entry.length; i++) { 
     if(Number(entry[i].value)) 
      total += Number(entry[i].value); 
    } 
    $('.totals').value = total; 
    }; 

我也试图摆脱的onchange动作&试图将每个表单称为'this',但我似乎无法抓住所有的值这种方式,我只得到一个数组...

$(.entries').change(function() { 
var entry = ($(this.form).get()); 
    console.log(entry); 
}); 

我敢肯定,可能有一些明显的我失踪,但我似乎无法得到我需要的东西。任何建议,将不胜感激!!

回答

1

修订现在将任意数量的字段 这里的工作是一个小提琴:http://jsfiddle.net/vx403ax0/6/

$(document).ready(function() { 
    $(".entries").change(function() { 
     $("form").each(function() { 
      var result = 0; 
      $(this).find(".entries").each(function(i, el){ 
       result += parseInt(el.value); 
      }); 
      if(isNaN(result)){ 
      return; 
      } else{ 
      $(this).find(".totals").val(result); 
      } 
     }); 
    }); 
}); 
+0

感谢您的快速反应。不幸的是,我每次都会有不明数量的输入字段。 (抱歉,忘记在我的问题中包含该部分)。由于它是生成的,因此每次都会返回不同数量的行,具体取决于数据库信息。我试图修改你的建议,以适应,但没有任何运气。 – heat222 2015-02-11 16:34:37

+0

固定。应该很好去 – ChrisJ 2015-02-11 17:00:02

+1

完美的作品:)再次感谢! – heat222 2015-02-11 19:38:08

1

这可能是inefficent,但得到完成任务。

$(document).ready(function() { 
    $(".entries").change(function() { 
     $("form").each(function() { 
      $form = $(this); 
      $val = 0; 
      $form.find('input:not(.totals)').each(function (i, el) { 
       if ($(el).val() !== '') { 
        $val += parseInt($(el).val()); 
       } 
      }); 
      $form.find(".totals").val($val); 
     }); 
    }); 
}); 

下面是基于ChrisJ评论小提琴:http://jsfiddle.net/d9boLc13/

+0

一旦我发现它必须每次都容纳不同数量的字段,我们采取了非常类似的方法。不错的工作。 – ChrisJ 2015-02-11 17:12:19

+0

这工作得很好。我选择Chris J作为解决方案的唯一原因是因为当我输入小数时,这给了我一个NaN结果。我将parseInt更改为Number,认为应该修复它,但无法让该部分根据需要正常工作。否则,它是完美的,非常感谢! – heat222 2015-02-11 18:57:08

+0

谢谢你的小提琴!它真的帮助我了解我所做的努力,以便能够玩弄它并且不会冒险破坏我的应用程序:) – heat222 2015-02-11 19:03:36