【问题标题】:event stopPropagation on div <a> child elementdiv <a> 子元素上的事件 stopPropagation
【发布时间】:2015-03-26 08:07:16
【问题描述】:

事件停止传播不适用于我的以下代码

<div id="notif_msg" class="messages" style="display: block;">
<a href="/fotos.php?pag=galeria&amp;view=315" class="message" id="2788">
    <span id="2788" style="color:white;">TRY</span>
</a>

然后我使用这个 jquery 来停止它的事件

$( '#notif_msg a.message' ).live("click",function( event ) {
       event.stopPropagation();
    });

我在这里疯狂的猜测是我点击了我的 span 元素而不是 a 元素。我正在使用实时事件,因为我附加了一些其他元素。

请帮忙。

更新----这是我动态加载通知的 ajax

function loadnotif(myid){

    $.ajax({
            type: "POST",
            url: "fragmentos/ajax/loadnotif.php",
            data:{"myid":myid},
            dataType: 'json',
            cache: false,
            success: function(html)
            {  
                $('#notif_msg').append(html.data);
                if(html.newnot == 1){
                    $('#noti-container').removeClass('noticon');
                    $('#noti-container').addClass('noticon-active');
                }                     
            }                   
      });
}

【问题讨论】:

  • 您使用的是哪个版本的 jQuery?对于较新的版本,我建议使用 on 而不是 live
  • 我使用 1.6 @empiric

标签: jquery javascript-events event-handling


【解决方案1】:

问题是您正在使用事件委托,live() 会将处理程序附加到文档对象,这意味着事件已经到达树的顶部并且没有更多可以传播

如果要停止传播,则需要将处理程序直接绑定到元素

$('#notif_msg a.message').click(function (event) {
    event.stopPropagation();
});

注意:您应该使用 jQuery live 工作,所以我假设您使用的是 jQuery .on() 进行事件委托,同样的原则也适用

【讨论】:

  • 嗨@Arun。仍然无法阻止传播。我把我的 jquery 放在文档准备功能下
  • @JohnChristianDeChavez 这些元素是否是动态创建的
  • 我现在应该做什么先生@Arun
  • @JohnChristianDeChavez 这取决于元素是如何创建的......我认为它们是在页面加载后动态创建的......对吗......还有你为什么要停止传播
  • 是的,它们是动态创建的。我使用ajax加载它们。我想停止传播,因为我想在进入指定页面之前先进行调试
猜你喜欢
  • 2010-11-05
  • 2018-06-19
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多