2012-08-03 74 views
3

我在事件處理程序上使用jQuery one()方法來觸發一次,然後取消註冊本身。喜歡的東西:重置jQuery one(),以便它會再次觸發

$(".main").one('mousedown', '.resizeBar', function (e) { /* my code */ }); 

然後一些Ajax(實際上,一個.net回傳)重置頁面的最(無需重新加載),我想重新設置事件處理程序。有沒有辦法重新設置one()事件處理程序再次處於活動狀態?手動重新觸發它這樣是不行的,明明:

$(".main .resizeBar").trigger("mousedown"); 

回答

13

只是包裝的代碼在功能

function mainMouseDownOne() { 
    $(".main").one('mousedown', '.resizeBar', function (e) { /* my code */ }); 
} 

$(document).ready(function(){ 
    mainMouseDownOne(); 

    .ajax({ 
     ... 
     success: function() { 
      ... 
      mainMouseDownOne(); 
     } 
    }) 
}); 
2

我會建議包裹一個()的函數調用內部方法結合,那麼您可以在加載頁面時調用該函數(以綁定初始事件處理程序),並在Ajax調用成功時再次調用該函數。

var bindEvents = function(){ 
    $(".main").one('mousedown', '.resizeBar', function (e) { /* my code */ }); 
}; 

$(function(){ bindEvents(); }); // call the one() method on page load. 

$.post(pageURL, function(data){ 
    bindEvents(); // As an example, after some sort of Ajax or post-reset event. 
}); 
+0

顯然,在我提交我的報告之前,有人發佈了一個非常類似(相同)的回覆。對不起,冗餘。 – 2012-08-03 17:45:43

+0

不用擔心。我會先接受他的,但我很感謝你的回答。我很困惑你爲什麼把$(function(){bindEvents();});而不僅僅是bindEvents();雖然。 – brentonstrine 2012-08-03 21:42:21

+0

這是因爲,在頁面加載時,您在調用最初的bindEvents()函數之前等待DOM準備好了......絕對需要在綁定事件之前加載頁面(HTML)。 – 2012-08-06 23:01:08