javascript - Jquery函数循环添加值

标签 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 fiddle,请参阅下面的链接,但仍然无法正常工作。

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

最佳答案

通过为您拥有的每种不同表单引入 Form 类型对象来简化代码怎么样?

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演示了上述模式正在执行您想要执行的操作。

请注意, fiddle 在输入 change 处理程序上为每个 formObj 调用 setTotal 方法:

$j('#questions_page_Page17 input').change(function(){
    form1.setTotal();
    form2.setTotal();
});

关于javascript - Jquery函数循环添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31147725/

相关文章:

javascript - Firefox WebExtension,在浏览器的存储中存储一个数组

javascript - Webpack 上的新手 GET 错误,用于 http 服务器和捆绑

javascript - Highcharts 列工具提示 - 始终位于顶部 + 适合容器

javascript - 使用 jQuery 生成 DIV 网格,但如果它不是 10 x 10,则会出现奇怪的行为

javascript - 未使用模态 Bootstrap 和 codeigniter 插入数据

javascript - 如何在不使用 JQUERY 的情况下连接两个 JSON 对象的 JavaScript 数组?

javascript - 使用动画 Jquery 在悬停时跟随鼠标

javascript - 使用 jquery mobile 时,siblings() 不起作用

javascript - 如何在 MongoDB shell 中将文档数组更改为值数组?

c - a [1]和b [1]有什么区别?