1

下面的脚本引发错误(未定义自定义字段)。我是否需要以不同的方式传递元素 ID?

我正在尝试使用要计算的表单字段为数组播种。它应该遍历数组中的每个表单字段,并使用表单元素的值递增 sum 变量。

jQuery(document).ready(function(){

    jQuery("#customfield_21070").attr('style','width:60px');
    jQuery("#customfield_21070").attr('disabled','disabled');

    var customfields = [
    '#customfield_11070',
    '#customfield_11071',
    '#customfield_20071',
    '#customfield_20072',   
    '#customfield_20073',
    '#customfield_20074'
    ];

    jQuery(customfields).each(function() {
        jQuery(this).attr('style','width:60px');

            jQuery(this).keyup(function(){
                calculateSum();
            });


        });

    });

    function calculateSum() {

        var sum = 0;

        //iterate through each textboxes and add the values
        jQuery(customfields).each(function() {

            //add only if the value is number
            if(!isNaN(this.value) && this.value.length!=0 && this.id !== "customfield_21070") {
                sum += parseFloat(this.value);
            }

        });
        //.toFixed() method will roundoff the final sum to 2 decimal places
        jQuery("#customfield_21070").val(sum.toFixed(2));
    }
4

3 回答 3

0

将数组传递给 jQuery 不会将数组中的条目用作选择器。您必须将选择器作为字符串传递。当您调用时this.valuethis它实际上是一个字符串而不是一个元素。尝试

jQuery(customfields.join(','))
于 2013-04-18T18:50:54.607 回答
0

jQuery 的.each()方法旨在迭代 jQuery 对象。你应该使用一个简单的循环来迭代你的数组——无论如何,for它比使用 jQuery 方法快得多。.each()

for(var i=0, len=customfields.length; i<len; i++) {
    console.log(customfields[i]);
}

关于性能声明的证明:http: //jsperf.com/jquery-each-vs-for-loop

于 2013-04-18T18:51:18.723 回答
0

尝试使用jQuery.each()

$.each(customfields, function (index, value) {
    $(value).attr('style', 'width:60px');  // OR $(value).width(60);
    $(value).keyup(function () {
        calculateSum();
    });
});
于 2013-04-18T18:51:46.610 回答