我正在使用一系列单元格(在质谱调查中),并尝试编写一个名为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(数组),或者是任意数量的不同类型的东西。
答案 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使用的参数必须是回调的参数