JavaScript回调错误或无法运行

时间:2015-09-09 16:05:43

标签: javascript function callback keyup

我正在使用一系列单元格(在质谱调查中),并尝试编写一个名为watchSet的函数,您可以将一组单元格和一个函数传递给监视任何更改的单元格集(keyups)并且每当更改任何一组单元格时,再次运行传递给它的函数。

models.Model.save()

使用它的示例函数是qualtricsSum函数(也使用mathSum函数)

function watchSet(set, mathFunction) {
    var setSize = set.length;
    for (var i=0; i < setSize; i++) {
        set[i].down().observe("keyup", function(){
            mathFunction
        });
    }
}

在watchSet函数中,我将mathFunction包装为function mathSum(set, output) { var setTotal = 0; for (var j=0; j < (set.length); j++) { var setInputValue = parseInt(set[j].down().value, 10); if (isNaN(setInputValue)) { setInputValue = 0; } setTotal = setTotal + setInputValue; } output.down().value = setTotal; } function qualtricsSum(array, output) { watchSet(array, mathSum(array, output)); } ,并且它运行mathSum函数,但似乎没有在keyups上运行它,但是如果我不用未命名的函数包装它,我将function(){...}视为错误。我不确定这是否是我问题的一部分。

当我手动运行watchSet中的for循环并将mathFunction替换为我打算运行的函数时,它实际上运行我每次编辑单元格时给它的函数。这让我觉得以某种方式调用watchSet(set,mathFunction)然后在函数定义中引用mathFunction实际上并没有传递我认为它正在传递的内容。

编辑: 我意识到,一旦我看到behtgod的答案,我没有澄清这一点: 我并不总是知道mathFunction的参数是什么样的,我希望能够传递任何带有任意数量参数的函数作为mathFunction。有时候它会是一个像mathSum(数组,输出)这样的格式的函数,有时候我会喜欢它是mathEqual(数组),或者是任意数量的不同类型的东西。

1 个答案:

答案 0 :(得分:0)

首先,你的mathFunction是一个函数,所以你应该像

一样使用它
mathFunction();

其次,执行下线时

watchSet(array, mathSum(array, output));

已调用mathSum,只将结果传递给watchSet函数。

所以你应该这样使用:

function watchSet(set, mathFunction) {
    var setSize = set.length;
    for (var i=0; i < setSize; i++) {
        set[i].down().observe("keyup", function(set,output){
            mathFunction(set,output)
        });
    }
}

function mathSum(set, output) {
    ...
}


function qualtricsSum(array, output) {
    watchSet(array, mathSum);
}

因为mathFunction是在回调中调用的,所以mathFunction使用的参数必须是回调的参数