我有时会因处理事件的方式而感到困惑。我只是想知道如何将事件传递给它的处理程序。
以下示例正常工作:
$(document).on('click', "div#foo", function(event) {
event.preventDefault();
});
但是如何将事件传递给name指定的处理程序,如:
// this obviously wont work
$('div#foo').on('click', fooClick);
function fooClick(event){
event.preventDefault();
}
感谢您的见解!
答案 0 :(得分:1)
你的第二个例子就是如何做到这一点,这将很好地工作。
.on()
负责设置它调用的回调的参数,传递的内容与声明回调的方式完全无关。无论如何声明回调,回调函数的第一个参数都是event
对象。
所以,这样可以正常工作:
function fooClick(event){
event.preventDefault();
}
// this works just fine
$('div#foo').on('click', fooClick);
工作演示:http://jsfiddle.net/jfriend00/BWKde/
重要的是要理解当你将fooClick
作为第二个参数传递给.on()
时,你只是传递一个函数引用。 .on()
决定如何调用该函数引用以及传递它的内容。{/ p>
仅供参考,如果您只传递#foo
,而不是div#foo
,则您的选择器通常效果会更好,除非您特别想要#foo
只匹配div
标签。由于id值只能在给定页面中使用一次,因此通常不需要进一步限定它们,这样做只会为选择器引擎做更多(不必要的)工作。
答案 1 :(得分:0)
你的代码没问题,
在http://jsfiddle.net/9266U/查看并在https://api.jquery.com/on/
了解详情$('div#foo').on('click', fooClick);
function fooClick(e){
alert("it work, nevrx");
e.preventDefault();
}
答案 2 :(得分:0)
Javascript是同步的,试着这样说:
function fooClick(event){
event.preventDefault();
}
$('div#foo').on('click', fooClick);