使用定义的函数而不是匿名函数作为回调

Maj*_*our 1 javascript jquery callback

为什么不能使用定义的函数作为事件回调?

<div id="me">
  <input>
</div>
Run Code Online (Sandbox Code Playgroud)
$(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());
}
Run Code Online (Sandbox Code Playgroud)

tym*_*eJV 8

您需要将函数作为参数传递.

$("#me").on('keyup', 'input', doit);
Run Code Online (Sandbox Code Playgroud)


Alb*_*gni 6

您应该传递该功能,而不是调用它

$("#me").on('keyup', 'input', doit)
Run Code Online (Sandbox Code Playgroud)

要清除错误的原因,请参阅以下示例:

$("#me").on('keyup', 'input', (function() {
  doit();
})()); 
Run Code Online (Sandbox Code Playgroud)

在这里,您传递一个匿名函数并立即调用它,这不是事件处理程序所期望的.

问题不在于匿名与否之间,问题在于您正在调用函数而不是传递函数.