将数组值传递给函数

passing array values into a function

本文关键字:函数 值传 数组      更新时间:2023-09-26

在下面的脚本中,console.log返回了正确的值,并且两个警报都触发了。但是,该值未定义。

你知道我做错了什么吗?

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',
    ];
    for(var i=0, len=customfields.length; i<len; i++) {
        console.log(customfields[i]);
        jQuery(customfields[i]).keyup(function(){
            alert('calculate');//FIRES
            calculateSum();
        });
    }

    function calculateSum() {
        var sum = 0;
        alert('value: ' + this.value);//UNDEFINED
        if(!isNaN(this.value) && this.value.length!=0 && this.id !== "customfield_21070") {
            sum += parseFloat(this.value);
        }
        jQuery("#customfield_21070").val(sum.toFixed(2));
    }
});

使用Function.prototype.call():

使用给定的this值和提供的参数调用函数单独.

第一个参数是thisArg:

this的值提供了fun的调用。请注意,this可能不会是方法看到的实际值:如果方法是中的函数非严格模式代码,null和undefined将被全局对象,原始值将被装箱。

因此,将this从处理程序函数传递给calculateSum,如下所示:

jQuery(customfields[i]).keyup(function(){
    calculateSum.call(this);
});

@canon是绝对正确的,以下是他所说的将解决您的问题。

你可以这样写:-

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',
            ];
            for (var i = 0, len = customfields.length; i < len; i++) {
                jQuery(customfields[i]).keyup(function () {
                    calculateSum(this);//Edited
                });
            }

            function calculateSum(param) {//Edited
                var sum = 0;
                alert('value: ' + param.value);//UNDEFINED
                if (!isNaN(param.value) && param.value.length != 0 && param.id !== "customfield_21070") {//Edited
                    sum += parseFloat(param.value);
                }
                jQuery("#customfield_21070").val(sum.toFixed(2));
            }
        });

这反映了您的alert中的正确值。**Tested**