我在尝试绑定一个函数到所有的链接上。目前这个函数在页面加载时就已经执行了,而不是在点击链接时执行。
这是我的代码。(如果需要查看函数showDiv()
,我可以将其发布。)你能告诉我是否犯了什么错误或愚蠢的地方吗?
$(document).ready(function(){
$('a.test').bind("click", showDiv());
});
谢谢!
你想把一个函数的引用作为回调传递给另一个函数,而不是函数执行的结果:
showDiv()
返回一些值; 如果没有使用return
语句,则返回undefined
。
showDiv
是应该被执行的函数的引用。
这样应该可以工作:
$(document).ready(function() {
$('a.test').on("click", showDiv); // jQuery 1.7 and higher
$('a.test').bind("click", showDiv); // jQuery 1.6 and lower
});
或者,您可以使用匿名函数来执行更高级的功能:
// jQuery 1.7 and higher
el.on('click', function() {
foo.showDiv(a, b, c);
// more code...
});
// jQuery 1.6 and lower
el.bind('click', function() {
foo.showDiv(a, b, c);
// more code...
});
在某些情况下,您可能会 希望 将函数返回的值用作回调:
function function foo(which) {
function bar() {
console.log('so very true');
}
function baz() {
console.log('no way!');
}
return which ? bar : baz;
}
el.click(foo(fizz));
在这个例子中,foo
使用fizz
进行求值,并返回一个函数,该函数将被分配为单击事件的回调。showDiv()
会调用从表达式showDiv
求值得到的函数对象 -- showDiv
本身仅仅求值为一个函数对象(在这种情况下),可以用作回调。 (没有“引用”;-)) - user166390看起来你直接调用了showDiv函数,并将showDiv()的返回结果绑定到点击处理程序,而不是直接绑定。
你需要像这样:
$(document).ready(function() { $('a.test').bind("click", showDiv); });
showDiv()
函数将立即被调用。$('a.test').bind("click", showDiv);
$('a.test').bind("click", showDiv);
(不要在showDiv
周围放置括号,因为您希望传递函数引用)。
jQuery(function($){ $('a.test').click(showDiv); });
。如果jQuery的工厂函数接收到一个函数,它会自动将其用作document.ready
回调。document.ready
回调将作为第一个参数发送jQuery对象,这允许您将jQuery
别名为$
,以防止任何可能的多库问题。此外,使用事件快捷方式可以提高可读性。 - zzzzBov.on
。https://dev59.com/nmgt5IYBdhLWcg3wvgBu - marsze