为什么不能将定义的函数用作事件回调?
<div id="me">
<input>
</div>
$(document).ready(function(){
// $("#me").on('keyup', 'input', doit()); # doesn't work
// $("#me").on('keyup', 'input', 'doit'); # neither does this
$("#me").on('keyup', 'input', function() {
doit();
}); // well, this one works of course
});
function doit() {
console.log($("input").val());
}
答案 0 :(得分:8)
您需要将函数作为参数传递。
$("#me").on('keyup', 'input', doit);
答案 1 :(得分:6)
您应该传递该功能,而不是调用它
$("#me").on('keyup', 'input', doit)
要清除错误的原因,请参阅此示例:
$("#me").on('keyup', 'input', (function() {
doit();
})());
这里传递一个匿名函数并立即调用它,这不是事件处理程序所期望的。
问题不在于匿名与否之间,问题在于您正在调用该函数而不是传递它。
答案 2 :(得分:2)
当您传递doit()
( “()
”)作为回调时,您实际上是在该点运行该函数并传入函数的返回值(可能undefined
)作为回调。如果仅传入对命名函数doit
的引用,则该函数将作为回调执行。
答案 3 :(得分:1)
当你在js中说一些= function(){blah}时,它会将其存储为文本并动态解析它 - 所以是的,你可以。 例如:
CallMe = function(){ alert("blah!"); }
bobsCallback.setFunction( CallMe );
CallMe与任何其他变量一样,但它的内容是函数的js。 您可以将其作为回调传递,或者像这样调用:
alert("calling CallMe...");
CallMe();