【问题标题】:How to use stopPropogation() for live events?如何将 stopPropogation() 用于现场活动?
【发布时间】:2010-12-07 18:07:00
【问题描述】:

HTML 代码:

  <li id="list_id">List_text<img src='image.jpg' id="img_id"></li>

jQuery 函数:

$("#list_id").live('click' , function(){
 alert('List is clicked');
});

$("#img_id").live('click' , function(){
 alert('Image is clicked');
});

一旦我点击图片,它的父 li 函数也会被触发。给我一个解决方案来解决这个问题。只有点击img元素时才需要触发img事件,点击li元素时需要触发li事件。

【问题讨论】:

    标签: jquery


    【解决方案1】:

    为了安全起见,这里需要.stopImmediatePropagation(),因为事件处理程序处于同一级别(.live() 事件处理程序默认位于document),如下所示:

    $("#list_id").live('click' , function(){
     alert('List is clicked');
    });
    
    $("#img_id").live('click' , function(e){
     e.stopImmediatePropagation();
     alert('Image is clicked');
    });
    

    You can test it here.


    请注意,如果您使用的是 jQuery e.isImmediatePropagationStopped() 检查它是否已停止,如下所示:

    $("#list_id").live('click' , function(e){
     if(e.isImmediatePropagationStopped()) return;
     alert('List is clicked');
    });
    
    $("#img_id").live('click' , function(e){
     e.stopImmediatePropagation();
     alert('Image is clicked');
    });
    

    【讨论】:

    • 它对我不起作用。 .live 函数不允许传播事件。
    • @Mohan - 你使用的是哪个版本的 jQuery?如果它是
    • @Mohan - 我不听你的评论......但答案中的第二个解决方案适用于你的 jQuery 1.4.2,或者升级到 1.4.4 并使用第一个。
    • 谢谢你。这个对我有用。如果我将我的 jquery 升级到 1.4.2 到 1.4.4 意味着我是否会遇到任何问题。
    • @Mohan - 应该没有任何问题,它有更多修复(比如传播!),但一如既往地点击并确保您拥有的任何插件按预期工作,只是为了安全起见.
    【解决方案2】:
    $("#img_id").live('click' , function(){
     alert('Image is clicked');
    return false;
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 2020-08-26
      • 1970-01-01
      • 2013-03-20
      • 2012-12-28
      • 1970-01-01
      相关资源
      最近更新 更多