2014-10-27 57 views
0

我想在點擊時刪除元素的點擊(我正在使用off()),並且想要在未單擊元素時重新附加點擊(' actived')。爲了表明它沒有被點擊,我使用了一個名爲'disabled'的類。重新連接已移除的事件處理程序不起作用

但是當我刪除,我不能再添加它。它只是不附加事件!

這就是我想要做的事:

$('.my-element').on('click', function() { 
    $('.my-element').off('click'); 
}); 

var disabled = setInterval(function() { 
if($('.my-element').hasClass('not-clicked')) { 
    $('.my-element').on(); 
    } 
}, 1000); 

我使用的setInterval()來觀看元素是否不點擊。如果不是,它可以再次使用on()。

我甚至試圖刪除事件處理程序在瀏覽器控制檯:

$('.my-element').off(); 

但是當我嘗試重新連接的事件處理程序...

$('.my-element').on(); 

它不工作,並不會重複這種行爲。

+1

因爲你沒有重新綁定任何東西......調用'.on'不記得事件。 – tymeJV 2014-10-27 19:17:17

+0

在這裏使用'setInterval'是個不錯的主意。 – undefined 2014-10-27 19:18:00

+0

爲什麼這是一個壞主意? – Skinka179 2014-10-27 19:21:38

回答

0

使用onoff沒有任何參數沒有效果。理想情況下,您應該傳遞事件的名稱,並將其處理程序傳遞給這些方法。

var handler = function() { 
    // ... 
} 
$('.my-element').on('click.namespace', handler); 
// ... 
$('.my-element').off('click.namespace', handler); 

如果處理程序應該被稱爲只有一次,你也可以考慮使用one方法。此外使用setIntevarl這是一個壞主意。你應該在添加類後立即綁定處理程序。在這種情況下,我建議使用事件委託技術:

$('#aStaticParent').on('click', '.my-element.not-clicked', function() { 
    // the handler is called only if the element has `not-clicked` className 
    $(this).removeClass('not-clicked'); 
}); 
0

jQuery.on()不記得刪除的事件,但你可以刪除它們之前保存當前的事件:

var handlers; 
$('.my-element').on('click', function() { 
    handlers = $.extend(true, {}, $._data(this, "events")); 
    $('.my-element').off('click'); 
}); 

,然後用連接:

$(".my-element").on("click", handlers.click[0].handler);