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()
函数。