2010-04-03 43 views
0

嗨,我刚刚开始尝试.live和.die,并有一些很好的结果,但有一件事情没有奏效。jQuery .die没有杀死附加事件?

我一直在用萤火虫控制台修改试验我的书面代码,看看我是否可以找出.die没有杀死附加事件的原因。

首先,如果我这样做

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

然后如预期,当我点击一个链接阿贾克斯打完,我的服务器端代码注入了内联编辑的形式。

但有时我想禁止这种行为,也使链接无法点击,所以我做了以下

//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; 
    }); 

回答

1

你必须这样做:

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

代码.click(function(){ return false; });的这部分不是.live(),这是一个正常的.bind('click')声明,所以你需要用.unbind('click')杀死它。

+0

感谢您对查明我要去哪里错了。我错过了那个流浪的点击,虽然我看了几个小时的代码。非常感谢你。 – robodisco 2010-04-05 10:32:55

+0

@adam - 欢迎:) – 2010-04-05 10:33:38

1

die()仅适用于受live()约束的事件。

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

+0

感谢您的高举。现在都好。 – robodisco 2010-04-05 10:33:37

1

点击活(点击)不具有相同的内部工作:

  1. 点击绑定(点击)立刻添加一个事件到每个元素的jQuery选择器
  2. 直播(点击)等待点击某个地方,然后检查是否在与jQuery选择器匹配的元素上完成了点击操作。

调用是活的对应物:在停止模式#2,而不是模式#1

如果你想删除已通过模式#1中添加一个事件,你需要调用解除绑定

杰罗姆·瓦格纳

+0

ahhhh我错过了错过直接呼叫点击。非常感谢你。现在就开始工作了。 – robodisco 2010-04-05 10:32:04