2013-03-27 30 views
0

我正在檢測沒有某個類(class =「off」)的div上的點擊,並且在該函數結束時設置了一個cookie觸發一些php代碼在刷新頁面後添加類「off」,因此在點擊並刷新頁面之後,該功能的動作不再適用於該特定的div。到目前爲止所有的好...檢測div是否具有某個添加了點擊的類(不刷新)

我遇到的問題是,我想要的功能停止工作的任何div已被點擊,而不必刷新頁面。我試着在函數的末尾添加使用.addClass的類,但即使現在當單擊div時它也會起作用並添加「off」類,但如果再次單擊該函數,該函數仍然適用於div,而我感覺它沒有檢測到對原始html代碼的更改。

如何在一次點擊後停止工作?

$('#example').not('.off').click(function() { 
// do stuff 
$('#example').addClass('off'); 
} 

謝謝你們。

+0

你需要解除綁定其上有添加了「關閉」類元素的點擊事件處理的事件處理程序,因爲點擊處理程序當它們沒有'.off'和'.click()'時,這些元素的初始綁定不會影響實時更改。 – 2013-03-27 20:01:51

回答

0

一旦結合的元素上的處理程序無法刪除只是通過刪除類。您需要解除綁定的處理程序以及

$('#example').not('.off').on('click', function() { 
    // do stuff 
    $('#example').addClass('off'); 
    //remove the event handler 
    $('#example').off('click'); 
} 

另一個解決方案是,你可以檢查的div已經通過

if($('#example').hasClass("off")) 
{ 
    return; 
} 

這是一個替代的解決方案的類。我會稱之爲quickfix。

0

改爲使用$(this)

$('#example').not('.off').click(function() { 
    $(this).addClass('off'); 
}); 

或者,如果要觸發一個事件一旦使用one

$('#example').one('click', function() { 
    // this code will be executed once per element 
}); 
+0

爲了更好的代碼,當然。但不影響OP的問題。 – 2013-03-27 19:59:41

+0

謝謝,但只有在函數內發生某些其他事情時纔會添加addclass,這使得$ this不適用(它通過其他函數)。問題不在於'off'沒有被添加,而是因爲函數沒有檢測到div有一個名爲「off」的新類, – user1202292 2013-03-27 20:02:05

0

如何不使用額外類別和簡單的刪除與.off

$('#example').click(function() { 
    $(this).off('click'); 
}); 
相關問題