Jquery函数循环添加值

时间:2015-06-30 20:17:25

标签: javascript jquery arrays

我试图从一个表单字段数组中获取总值但由于某种原因,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小提琴,请参阅下面的链接,但仍无效。

http://jsfiddle.net/q05k48b7/2/

1 个答案:

答案 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();
});