0

当我删除我的匿名函数并直接调用一个函数时,它只有在没有参数的情况下才有效。

作品。使用参数,在匿名函数内:

$(document).ready(function () {
    $('#someId').on('click', function () {
        setAllOn(checkOn)
    });
});
function setAllOn(checkOn) {
    $("#someId2 input[name='someName']").attr('checked', checkOn);
}

作品。没有匿名函数,但只有没有参数:

$(document).ready(function () {
    $('#someId').on('click', setAllOn);
});
function setAllOn() {
    $("#someId2 input[name='someName']").attr('checked', true);
}

不工作。添加了一个参数,现在它不起作用:

$(document).ready(function () {
    $('#someId').on('click', setAllOn(true));
});
function setAllOn(checkOn) {
    $("#someId2 input[name='someName']").attr('checked', checkOn);
}
4

1 回答 1

2

您需要将回调传递给on即触发事件时要调用的函数。

setAllOn是一个函数。这就是它起作用的原因。

function () { setAllOn(checkOn) }仍然是一个功能。

setAllOn(true)是调用函数的结果setAllOn。由于它什么都不返回,所以结果是undefined. 这不是一个功能。

如果要重用setAllOn函数。您可以定义一个高阶函数,接受参数并返回setAllOn.

function setAll(checkOn){
    return function(){ return setAllOn(checkOn);}
}

function setAllOn(checkOn) {
    $("#someId2 input[name='someName']").attr('checked', checkOn);
}

$(document).ready(function () {
    $('#someId').on('click', setAll(true));
});
于 2013-10-16T09:37:28.747 回答