我试图从一个表单字段数组中获取总值但由于某种原因,Keyup上的值不正确,最后一个值从最后一个输入值中添加,而不是这里的所有字段都是我的函数:
function percentage_hardcoded_form(_formharcoded_id, _form_fieldArray, _form_hardcodedtotalWrapper, _form_hardcodedtotalId) {
var _form = $j(_formharcoded_id);
var _sumDisplay = _form.find(_form_hardcodedtotalId);
$j(_form_hardcodedtotalId).attr('disabled','disabled');
$j.each(_form_fieldArray, function(index, item) {
var _summands = item;
var sum = 0;
_form.delegate(_summands, 'change', function () {
//$j.each(function () {
var value = Number($j(this).val());
if (!isNaN(value) && !$j(this).is(_form_hardcodedtotalId)) sum += value;
//});
if(sum === 100)
{
// is 100
$j(_form_hardcodedtotalWrapper).removeClass('warning');
$j(_form_hardcodedtotalWrapper).find('.QuestionWarning').hide();
}
else
{
// isnt 100
$j(_form_hardcodedtotalWrapper).addClass('warning');
$j(_form_hardcodedtotalWrapper).find('.QuestionWarning').show();
}
_sumDisplay.val(sum);
});
});
}
percentage_hardcoded_form('#aspnetForm #questions_page_Page17', designForm_ids_1, "#question_DCWorkSplit", "#DCWorkSplit");
这是我正在使用的jsfiddle: http://jsfiddle.net/q05k48b7/1/
更新
我已经更新了JS小提琴,请参阅下面的链接,但仍无效。
答案 0 :(得分:1)
如何通过为每种不同的表单引入Form-type对象来简化代码?
var formObj = function($){
var fields = [];
var total = 0;
var totalField = null;
return {
setFields: function(fieldIds){
fields = fieldIds;
},
setTotalField: function(fieldId){
totalField = fieldId
},
setTotal: function(){
var total = 0;
$.each(fields, function(idx,item){
var v = $('#'+item).val();
if(!isNaN(v)){
var nV = Number(v);
total += nV;
}
});
$('#'+totalField).val(total);
};
};
};
然后您可以像这样使用它:
var form1 = new formObj($j);
form1.setFields([
'TurnoverFromOwnDesign',
'Feesinrespectofdesignonly',
'TurnoverFromSubcontractedWork',
'TurnoverFromSupervisedWork',
'TurnoverDesignsByClient',
'DCAllotherturnover'
]);
form1.setTotalField('DCWorkSplit');
form1.setTotal();
问题不是太明确 - MVCE会有所帮助,但我认为this fiddle会证明上述模式正在做你想要做的事情。
请注意,小提琴为输入setTotal
处理程序上的每个formObj
调用change
方法:
$j('#questions_page_Page17 input').change(function(){
form1.setTotal();
form2.setTotal();
});