Javascript 将事件传递给eventhandler

Javascript 将事件传递给eventhandler,javascript,jquery,events,event-handling,Javascript,Jquery,Events,Event Handling,有时我仍然对事件的处理方式感到困惑。我只是想知道如何将事件传递给它的处理程序 以下示例很好地工作: $(document).on('click', "div#foo", function(event) { event.preventDefault(); }); 但是如何将事件传递给由名称指定的处理程序,如: // this obviously wont work $('div#foo').on('click', fooClick); function fooClick(event){

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

以下示例很好地工作:

$(document).on('click', "div#foo", function(event) {
    event.preventDefault();
});
但是如何将事件传递给由名称指定的处理程序,如:

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

谢谢你的见解

您的第二个示例正是如何做到这一点,这将很好地发挥作用

.on()
负责为它调用的回调设置参数,而传递的内容与您如何声明回调完全无关。回调函数的第一个参数将是
事件
对象,无论回调如何声明

因此,这将很好地工作:

function fooClick(event){
    event.preventDefault();
}

// this works just fine
$('div#foo').on('click', fooClick);
工作演示:

需要了解的是,当您将
foock
作为
.on()
的第二个参数传递时,您只是传递了一个函数引用。是
.on()
决定如何调用该函数引用以及传递它的内容


仅供参考,如果您只通过
#foo
,而不是
div#foo
,则您的选择器通常会表现得更好,除非您特别希望仅匹配
#foo
标签中的
#foo
。由于id值在给定页面中只能使用一次,您通常不需要进一步限定它们,这样做只会使选择器引擎做更多(不必要的)工作。

您的代码正常

查看并阅读更多信息


Javascript是同步的,请尝试这样说:

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

谢谢你的快速回复。但它似乎对我不起作用。我在链接上使用preventDefault,如果使用第二个示例中描述的方式,它会在一个新窗口中打开链接。@nevrx-你能在JSFIDLE中将其简化为一个小演示吗?因为这个概念是正确的,所以你的实现肯定有其他问题。@nevrx-我添加了一个工作演示,向你展示这个概念工作得很好:我刚刚做了,它工作得很好。。不幸的是,因为我无法在我的网站上运行它,这很奇怪。所以,谢谢你确认,我最终没有错。明天我会想办法找出奇怪的地方。谢谢你,伙计!我只能检查一个答案是否正确,你的答案也是。
function fooClick(event){
    event.preventDefault();
}
$('div#foo').on('click', fooClick);