Javascript jQuery传播顺序奇怪

Javascript jQuery传播顺序奇怪,javascript,jquery,events,propagation,Javascript,Jquery,Events,Propagation,我简化了HTML和Javascript HTML结构 ul -> li -> a javascript文件 var $ul = $('#the-list'); $ul.find('a').click(function(e){ e.stopImmediatePropagation(); console.debug('a'); }); $ul.unbind('click').click(function(){ console.debug('ul'); });

我简化了HTML和Javascript

HTML结构

ul -> li -> a
javascript文件

var $ul = $('#the-list');

$ul.find('a').click(function(e){
    e.stopImmediatePropagation();
    console.debug('a');
});

$ul.unbind('click').click(function(){
    console.debug('ul');
});
问题

第一次单击链接时,一切正常。但是在使用
$ul.html(newHtml)
更新列表内容并再次运行上面的代码之后,首先调用$ul上的事件

第一次:

  • a
  • 停在那里
  • 第二次:

  • 保险商实验室
  • a

  • 什么会导致这种行为?请原谅这个问题的相反结构

    如果你正在删除你的
    ul
    的内容,你不应该将事件侦听器绑定到内容上;相反,将单击侦听器绑定到
    ul
    本身,您可以在一个侦听器中侦听
    ul
    及其子对象上的单击事件。这称为事件委派

    $ul.click(function (e) {
        var $target = $(e.target);
        console.log($target);
    });
    
    如果您想专门监听
    ul
    及其包含的锚元素上的点击事件,可以使用:


    应该为您提供所需的单击事件。我不是100%肯定这一点,因为
    .add
    可能会改变一些事情,但这是最基本的想法。现在就开始测试。

    您的代码按预期工作:在IE和其他软件中测试。每次单击列表中的每个链接仅记录
    “a”
    ;使用新内容更新列表和重新绑定事件仍然只会导致每次单击时登录
    “a”
    “ul”
    被记录的唯一时间是在锚定标记外发生单击时,这是意料之中的。感谢您的测试,但我实际上知道这一点。这就是为什么我要用我的措辞来回答这个问题。@Znarkus:那么你是在让我们猜测是什么原因导致你的代码不起作用?那么你会怎么问这个问题?@Znarkus:哦,我不知道,也许隔离并发布实际上不起作用的代码。无法使事件目标方法起作用;目标元素是
      ,即使我单击了一个。试图添加一个空的点击处理程序,但没有骰子。@Znarkus:对不起,我有点跑题了。你到底对哪些点击感兴趣?
      s?我希望一个处理程序用于
        ,一个处理程序用于所有,但是如果用户单击一个,则该事件应该发生precedence@Znarkus:您真的永远不会看到来自
        的点击-只会看到来自其子项的点击,
      • 及其子项。这就是说,您可以通过只监听
        本身上的点击事件来获取所有这些事件,因为对其子对象的点击会冒出气泡。像这样:但在我更新
        的内容之前,一切都是正常的,这让我很困惑
        $ul.add($ul.find('a')).live('click', function (e) {
            console.log(e.target);
        });