jQuery .live()当将新匹配添加到DOM时,“click”事件被解除绑定

时间:2009-09-15 22:22:09

标签: javascript jquery html

这是我遇到的问题。我有两个jQuery .live()事件,都用于点击事件。这些是在页面加载开始时初始化的;然后他们等待,直到与选择器匹配的项目出现并点击。现在,问题是当一个项目被添加到与选择器匹配的DOM时,实时事件是未绑定的(或者可能不是 - 它们根本不起作用。我已经验证它们不是偶数也被调用(在Firebug中设置一个断点内部,当我点击一个匹配选择器的链接时,它永远不会被触发 - 因此甚至不会调用该函数)。

此外,不仅是与这些特定选择器匹配的现场活动被搞砸了 - 当添加新项目时,它是每个未绑定的活动(或其他任何正在发生的事件)。

有没有人有过jQuery中的直播活动这样的经历? ......或者找到了解决方案?

2 个答案:

答案 0 :(得分:1)

一种可能性是,匹配的元素包含在处理click事件并停止click事件传播的元素中。

例如:

<script type="text/javascript">
    $(function() {
        $(".selector").live("click", function() { alert("clicked"); });
    });
</script>
<div onclick="event.stopPropagation();">
    <div class="selector">Click me</div>
</div>

在此示例中,单击“单击我”将执行.live方法指定的事件。这是因为.live将事件绑定在DOM的更高级别(参见Josh Powell的评论here),因此,由于事件冒泡的性质,“event.stopPropagation();”在您的直播活动之前执行。由于它会停止传播,因此您的实时点击事件永远不会执行。

一个替代方法是使用jquery的livequery插件绑定每个匹配的元素。 (我试图提供一个链接,但作为一个新用户,stackoverflow阻止我发布多个链接)

答案 1 :(得分:0)

示例代码可能有助于诊断问题=)您确定有问题的元素与您提供的选择器相匹配吗?因为DOM的后期添加正是构建live以解决的问题。