【问题标题】:addEventListener in jQuery [duplicate]jQuery中的addEventListener [重复]
【发布时间】:2011-10-24 22:08:57
【问题描述】:

可能重复:
jQuery equivalent of JavaScript's addEventListener method

也来自一个非常好的 jQuery 教程:http://itunes.apple.com/in/app/designmobileweb/id486198804?mt=8

以下语句的 jQuery 等效项是什么;

element1.addEventListener('click',doSomething2,false)

如果是bind()方法,有没有指定最后一个参数的选项(即事件冒泡或捕获...true/false)

谢谢。

【问题讨论】:

  • 是的,bind 的第三个参数仍然可以用来达到这个效果:api.jquery.com/bind
  • false 是所有事件处理程序的默认值,因为 IE 不支持在捕获阶段触发处理程序。 jQuery 无法将其设置为 true
  • @James:我想你误解了第三个参数。它是一个函数或false,但在这种情况下false 意味着:将第三个参数设置为false 将附加一个函数,该函数可防止发生默认操作并阻止事件冒泡。 .
  • @Felix - “将第三个参数设置为 false 将附加一个防止默认操作发生并阻止事件冒泡的函数。”还是我误解了这个问题?

标签: javascript javascript-events jquery addeventlistener


【解决方案1】:

试试这个

// Setting the third argument to false will attach a function
// that prevents the default action from occurring and 
// stops the event from bubbling.
$("#element1").bind("click", doSomething2, false);

【讨论】:

  • 不错,值得一提的是,它是从1.4.3版本开始添加的
  • 这不等同于addEventListener 的第三个参数。它只是function(){ return false; } 的快捷方式。您编写的调用会将doSomething2 视为事件数据(并可能引发错误)。
  • @Felix - 我同意你的观点,但 OP 想要这样的东西来通过传递参数来防止事件冒泡。
  • @Shankar:不,将false 传递给addEventListener 不会这样做(防止冒泡)。它只是指示应该在哪个阶段触发事件处理程序。看看developer.mozilla.org/en/DOM/element.addEventListener
  • @Felix - 我并不是说我提供的解决方案完全等同于它。但它解决了问题第二行中提到的OP以及绑定。
【解决方案2】:

是的,我很确定 .bind() 会根据您的需要工作。查看jQuery .bind() docs page 我相信您可以弄清楚设置。演示代码如下:

$(document).ready(function() {
    $("#element1").bind('click', function() {
        // do something on click
    } 
});

【讨论】:

    【解决方案3】:

    使用 jquery bind method

    示例:

    document.bind("custom-listener", someCustomFunction, false);
    
    document.trigger("custom-listener", {jsonArgsKey:jsonValue});
    
    function someCustomFunction(json)
    {
    alert(json.jsonArgsKey);
    }
    

    【讨论】:

    • 您忘记了您的$ 功能!你不是说$(document).bind... 等等吗?
    【解决方案4】:

    像这样:

    $(element1).click(doSomething)
    

    如果您想停止冒泡,请在您的 doSomething 函数中调用 event.stopPropagation(),如下所示:

    function doSomething (event){
      event.stopPropagation()
      // do whatever
    }
    

    不过,无法使用 jQuery 设置捕获事件处理程序。

    【讨论】:

      猜你喜欢
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 2023-03-14
      • 2017-02-04
      • 2015-11-16
      • 1970-01-01
      相关资源
      最近更新 更多