jquery - 不需要的传播效果

时间:2011-11-13 22:52:10

标签: jquery listener event-propagation

我在课堂上有一个实时监听器,可以添加一些内容。 这是以某种方式反复调用这个监听器。在这种情况下如何关闭传播?

SomeContent = "<p>Some content<p>";
moreContent  = "<p>More content<p>";

$('.myClass').live('change', function (event){                  
    var thisOption = $(this);                               

    // event.preventDefault(); - does not work              
    // event.stopImmediatePropagation(); - does not work

    var MyLocation = thisOption.closest('tr').next('tr');               
    // $(MyLocation).html("");                  
    var thisTplReasons = $(moreContent);
    thisTplReasons.appendTo(MyLocation).page();

    return false;
});     

2 个答案:

答案 0 :(得分:1)

jQuery live函数有一些缺陷记录here。列表中有趣的部分是这个陈述

  

在事件处理程序中调用event.stopPropagation()对于停止附加在文档中较低位置的事件处理程序是无效的;该事件已经传播到文件。

你应该使用新的jQuery机制“on”(参见here)而不是“live”,并且对event.stopPropagation()的调用应该按预期工作。

答案 1 :(得分:0)

首先捕获事件,直到它到达目标元素,然后冒泡。在事件流期间,可以通过引发操作和/或通过停止事件(对于符合W3C的浏览器的方法event.stopPropagation(),在任一阶段中的路径中的任何元素(观察者)响应事件。对于Internet Explorer,命令event.cancelBubble = true),和/或取消事件的默认操作。

Source wiki

此外,

jQuery says

event.stopPropagation()

描述:防止事件冒泡DOM树,防止任何父处理程序被通知事件。

希望这有帮助。