2010-04-03 68 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