【问题标题】:pass event to eventhandler将事件传递给事件处理程序
【发布时间】:2014-04-24 00:22:48
【问题描述】:

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

下面的例子可以正常工作:

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

但是如何将事件传递给由名称指定的处理程序,例如:

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

感谢您的见解!

【问题讨论】:

    标签: javascript jquery events event-handling


    【解决方案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() 决定如何调用该函数引用以及传递什么。


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

    【讨论】:

    • 感谢您的快速回复。它似乎仍然不适合我。我在链接上使用 preventDefault,如果我使用第二个示例中描述的方式,它会在新窗口中打开链接。
    • @nevrx - 你能把它简化为 jsFiddle 中的一个小演示,因为这个概念是正确的,所以你的实现肯定有其他问题。
    • @nevrx - 我添加了一个工作演示,向您展示这个概念工作得很好:jsfiddle.net/jfriend00/BWKde
    • 我刚刚做了,它可以工作.. 不幸的是,因为我无法让它在我的网站上运行,这很奇怪。所以,感谢您确认,我最终并没有那么错。明天我会试着找出奇怪的地方。
    【解决方案2】:

    你的代码没问题,

    查看http://jsfiddle.net/9266U/ 并在https://api.jquery.com/on/阅读更多内容

    $('div#foo').on('click', fooClick);
    function fooClick(e){
        alert("it work, nevrx");
        e.preventDefault();
    }
    

    【讨论】:

    • 谢谢伙计!我只能检查一个答案是正确的,你的也是。
    【解决方案3】:

    Javascript是同步的,试着这样写:

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

    【讨论】:

      猜你喜欢
      • 2012-08-30
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 2021-05-30
      • 2016-06-23
      相关资源
      最近更新 更多