jQuery .die没有杀死附加事件?

时间:2010-04-03 12:56:57

标签: jquery

您好我刚刚开始尝试使用.live和.die并获得了一些很好的结果,但有一点是行不通的。

我一直在修补firebugs控制台以试用我的书面代码,看看我是否能找出原因.die并没有杀死附加事件。

首先,如果我这样做

//attach ajax submission
    $('a[href$=edit]').live("click", function(event) {
        $.get($(this).attr("href"), null, null);
        return false;
    });

然后按照预期,当我点击链接时,ajax会关闭,我的服务器端代码会注入一个用于内联编辑的表单。

但有时我想禁用此行为并使链接无法点击,因此我执行以下操作

//unbind ajax form creation when we click on a link, then disable its semantic behaviour
    $('a[href$=edit]').die("click").click( function(){  return false; } );

哪个有效但是如果然后尝试删除它并使用下面的代码恢复ajax良好不起作用,而是链​​接仍然无法点击。我弄清楚为什么?有人可以帮忙吗?

//remove any previous events from the links
    $('a[href$=edit]').die();
    //attach ajax submission
    $('a[href$=edit]').live("click", function(event) {
        $.get($(this).attr("href"), null, null);
        return false;
    });

3 个答案:

答案 0 :(得分:1)

你必须这样做:

$('a[href$=edit]').die().unbind('click');

您的代码.click( function(){ return false; } );的这部分不是.live(),而是正常的.bind('click')声明,因此您需要使用.unbind('click')将其删除。

答案 1 :(得分:1)

die()仅适用于live()绑定的事件。

return false事件是使用click()绑定的,bind()是{{1}}的替代面孔。以这种方式绑定的事件需要使用unbind()解除绑定。

答案 2 :(得分:1)

点击直播(点击)没有相同的内部工作方式:

  1. 单击绑定(单击)立即向jQuery选择器的每个元素添加一个事件
  2. live(click)等待点击某处,然后检查是否已对与jQuery选择器匹配的元素进行了点击。
  3. 调用 die 是生活的对应物:你停止模式#2,而不是模式#1

    如果要删除通过模式#1添加的事件,则需要调用取消绑定

    Jerome Wagner