为什么点击事件处理程序在页面加载时立即触发?
我正在玩一个我想绑定到所有链接的函数。 目前该function会在页面加载时触发,而不是点击链接。
这是我的代码。 (如果你需要的话,我可以在函数showDiv()
过去showDiv()
你能告诉我在这里做错了什么吗?
$(document).ready(function(){ $('a.test').bind("click", showDiv()); });
谢谢
你想传递一个函数的引用作为callback,而不是函数执行的结果:
showDiv()
返回一些值; 如果没有使用return
语句,则返回undefined
。
showDiv
是对应该执行的函数的引用。
这应该工作:
$(document).ready(function(){ $('a.test').bind("click", showDiv); });
或者,您可以使用匿名函数来执行更高级的function:
...bind('click', function(){ foo.showDiv(a,b,c); ...more code... });
在某些情况下,您可能希望使用函数返回的值作为callback:
function function foo(which) { function bar() { console.log('so very true'); } function baz() { console.log('no way!'); } return which ? bar : baz; } ...click( foo( fizz ) );
在这个例子中, foo
使用fizz
进行评估,并返回一个函数,该函数将被指定为click事件的callback函数。
看起来你直接在那里调用函数showDiv(并将showDiv()的返回结果绑定到click处理程序,而不是直接绑定它。
你想要的东西
$(document).ready(function() { $('a.test').bind("click", showDiv); });
使用下面的行。 当执行该行时, showDiv()
将调用该函数。
$('a.test').bind("click", showDiv);
将其更改为: $('a.test').bind("click", showDiv);
(不要把showDiv
放在parens上,因为你想通过函数引用)。