如果在页面上找不到元素,绑定jQuery元素中断?

时间:2010-09-21 16:43:15

标签: jquery

如果在页面上找不到我绑定jQuery代码的元素会发生什么? 先前的绑定代码是否中断?

让我用样本解释一下。我的页面中有以下代码:

<script type="text/javascript">
$(document).ready(function() {
    $('.deleteMemo').live('click', function() {
        $.ajax({
            [ajax call omitted for brevity]
        });
    });

    $('.markAsViewed').live('click', function() {
        $.ajax({
            [ajax call omitted for brevity]
        });
    });
});
</script>

现在,根据页面中的页面状态,可能会出现:

  • 仅包含“deleteMemo”类
  • 的元素
  • 仅包含“markAsViewed”类
  • 的元素
  • 两个

我正在试验,在第一种情况下(仅“deleteMemo”元素),jQuery代码根本不会被调用。我仍然没有尝试过其他情况,但我已经对代码进行了三次检查,甚至用fiddler查看了它。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

调用.live()时元素是否在页面上并不重要,因为.live()没有将处理程序绑定到实际元素。

这是使用.live()的目的。它允许动态添加到页面的元素触发在它们存在之前添加的处理程序。

如果.deleteMemo的任何祖先(例如)停止发生事件冒泡,那么live()将不适用于该元素。

因此,如果您有任何祖先的任何点击处理程序:

event.stopPropagation();

或:

return false;

...在其中,live()处理程序不会触发。

当然,如果选择器不匹配(例如检查大小写),那么处理程序将不会触发。