当我删除匿名函数并直接调用函数时,它仅在没有参数的情况下有效。
工程。使用参数,在匿名函数内:
$(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);
}
您需要
向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));
});