JavaScript函数执行得太快了

在下面的示例中, myFonk立即被调用; 它不会等待click事件。 为什么不?

  function myFonk(info) { $("#result").html(info); } function getText(text) { return function () { myFonk(text); } } $(document).ready(function () { $("#b1").click(getText("getText")); $("#b2").click(myFonk("myFonk")); }); 

每当我们用()编写函数名时,它立即调用该函数,因此myFonk("myFonk")不正确。

写下面的方式。

 function myFonk(info) { $("#result").html(info); } function getText(text) { return function () { myFonk(text); } } $(document).ready(function () { $("#b1").click(getText("getText")); $("#b2").click(function () { myFonk("myFonk") }); }); 

这是因为你没有传递对函数的引用。 您正在调用函数并将结果用作click的事件处理程序。

这将为你解决这个问题……

 function myFonk(info) { $("#result").html(info); } function getText(text){ return function() { myFonk(text); } } $(document).ready(function() { $("#b1").click(function() { getText("getText") }); $("#b2").click(function() { myFonk("myFonk") }); }); 
 $(document).ready(function () { $("#b1").click(getText("getText")); }); 

你在这里做的是调用函数getText("getText")并将该调用的结果传递给$("#b1").click() 。 您不想传递函数的结果 。 你想要做的是传递函数本身。 所以重写为,

 $(document).ready(function () { $("#b1").click(function() { return getText("getText"); }); }); 

如果你感兴趣的函数没有参数(例如,你想要调用函数hello() ,没有参数,你可以用同样的方式做到:

 $(document).ready(function () { $("#b1").click(function() { return hello(); }); }); 

……或者你可以简化它:

 $(document).ready(function () { $("#b1").click(hello); }); 

注意:你传递的是hello (函数本身),而不是hello() (它会立即执行函数并将结果返回给click()函数。