将事件传递给eventhandler

时间:2014-04-24 00:22:48

标签: javascript jquery events event-handling

我有时会因处理事件的方式而感到困惑。我只是想知道如何将事件传递给它的处理程序。

以下示例正常工作:

$(document).on('click', "div#foo", function(event) {
    event.preventDefault();
});

但是如何将事件传递给name指定的处理程序,如:

// this obviously wont work
$('div#foo').on('click', fooClick);
function fooClick(event){
    event.preventDefault();
}

感谢您的见解!

3 个答案:

答案 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);