2011-02-02 54 views
4

是否有可能刪除比回加點擊事件到特定元素?即jquery刪除並添加回單擊事件

我有一個 $("#elem").click(function{//some behaviour});$(".elem").click(function{//some behaviour});(有超過1元),而我的其他功能getJson正在執行,我想從#elem刪除點擊事件,並添加它再次從功能的getJSON的onSuccess,但始終保持mouseenter和mouseleave事件?

或者,也許創建覆蓋,以防止像模態窗口點擊?這是更好的主意嗎?

編輯:

我已經看到了一些很好的答案,但有一個細節,我省略不是故意的。有多個元素,我稱className上的click函數不在elementId上,正如我在原始問題中所述

+0

事件處理程序中的初始if語句可能會檢查布爾型`jsonIsLoaded`是否爲true。如果是,則將其設置爲「false」並繼續,否則調用event.preventDefault()並返回false。這樣你就不必一直綁定和解除綁定事件! – 2011-02-02 22:45:30

+0

@afEkenholm niceeee – London 2011-02-02 22:52:56

回答

6

而不是使用unbind(),這意味着你有相同的事件處理程序後重新綁定,您可以使用jQuery的data()設施與ajaxStartajaxStop事件有你的元素忽略所有的AJAX請求時click事件:

$(".elem").click(function() { 
    if (!$(this).data("ajaxRequestPending")) { 
     // some behaviour 
    } 
}).ajaxStart(function() { 
    $(this).data("ajaxRequestPending", true); 
}).ajaxStop(function() { 
    $(this).removeData("ajaxRequestPending"); 
}); 

編輯:這個答案也是ID與班級防(見提問的編輯),因爲一切都匹配選擇將處理AJAX事件是正確的方式。這是jQuery的主要賣點,它顯示。

2

您正在尋找.unbind()。通過它'click'它會破壞點擊事件。

我會把它放在你的getJSON之前,並在你的ajax調用的成功處理程序中重新綁定click事件。

0

而不是解除綁定/綁定click事件,您可以檢查另一個變量的狀態以查看它是否應該執行該操作。

var MyObject = { 
    requestActive = false; 
}; 

function MyJsonFunction() { 
    // when requesting 
    MyObject.requestActive = true; 
    //... 
    // when request over 
    MyObject.requestActive = false; 

} 

$("#elem").click(function{ 
    if (MyObject.requestActive == true) { 
    //do something 
    } 
});