我试图从表单上的一堆输入文本字段中获取值,然后检查它们是否加起来为100.我使用下面的jQuery来执行此操作,但我只是得到“NaN”返回 - 有谁知道这是为什么?毫无疑问,我错过了一些愚蠢的东西(!)
var formPercentageTotal = 0;
var currentVal = 0;
setInterval(function(){
$('.percentage-validate input.three-digit').each(function(){
currentVal = $(this).val();
currentVal = parseInt(currentVal);
formPercentageTotal = formPercentageTotal + currentVal;
});
$('.percentage-validate .percentage-current').text(currentVal);
}, 500);
答案 0 :(得分:3)
在加起来之前尝试检查NaN。您可能已在任何输入字段中输入了alpahabet。 Fiddle
修改:您应该将formPercentageTotal设置为.formPercentageTotal
。
var formPercentageTotal = 0;
var currentVal = 0;
setInterval(function(){
$('.percentage-validate input.three-digit').each(function(){
currentVal = $(this).val();
currentVal = parseInt(currentVal);
if (!isNaN(currentVal)) {
formPercentageTotal = formPercentageTotal + currentVal;
}
});
$('.percentage-validate .percentage-current').text(formPercentageTotal);
}, 500);
答案 1 :(得分:1)
这个问题已经得到了解答,但是有一些关于你的代码的东西会使它效率低下且容易出错。考虑一下这段代码:
$.fn.boundForm = function(options) {
var defaults = {
fields: ".three-digit",
total: ".percentage-current",
validateInput: function(item) {
item.value = parseInt(item.value.replace(/[^0-9]+/g, "")) || 0;
return parseInt(item.value);
},
calculateTotal: function(fields) {
return fields.toArray().reduce(function(sum, item) {
return sum + this.validateInput(item);
}.bind(this), 0);
},
refresh: function(form) {
form.find(this.total).text(this.calculateTotal(form.find(this.fields)));
}
}
var o = $.extend({}, defaults, options);
this.each(function() {
var $form = $(this);
$form.on("input", o.fields, function() {
o.refresh($form);
});
o.refresh($form);
});
};
$(".percentage-validate").boundForm();
这是一个基本的小部件,与您的代码完全相同,但是:
validateInput
,它替换任何非数字,如果值为空则返回0; $("#myContainer").boundForm(myOptions)
; 总而言之,这样可以使用更方便的代码。希望有所帮助。
P上。 S. Here's fiddle