$(".on")
和匹配選擇的DOM目前$(".off")
選擇元素。因此,如果您將元素的類從.on
更改爲.off
,那麼它將繼續觸發.on
事件處理程序,因爲這是綁定到元素的元素。你可以使用事件委託,但我認爲.toggleClass()
可能是對你更好的實現:
$(".on, .off").bind('click',function() {
$(this).toggleClass('on off');
alert('Hello World');
})
這裏是一個演示:http://jsfiddle.net/LEvM4/1/
如果您需要知道哪些類是目前你可以檢查元素.hasClass()
:
$(".on, .off").bind('click',function() {
$(this).toggleClass('on off');
if ($(this).hasClass('on')) {
alert('Hello World');
} else {
alert('Goodbye World');
}
})
這裏是一個演示:http://jsfiddle.net/LEvM4/2/
關於事件代表團的一句話。你也可以綁定到的是你要綁定到該元素的祖先元素,並委託事件處理程序,以後代元素:
$(document).delegate(".on", 'click', function() {
$(this).addClass('off').removeClass('on');
alert('Goodbye World');
}).delegate(".off", 'click', function() {
$(this).addClass('on').removeClass('off');
alert('Hello World');
})
這裏是一個演示:http://jsfiddle.net/LEvM4/3/
有不利的一面事件代表團認爲,當一個事件觸發時,需要更多的開銷。如果可能,通常最好嘗試直接綁定到元素。通常情況下,如果元素當前不存在於DOM中,但您想要綁定到元素的未來實例,則使用事件委託。
有些文檔爲雅:
感謝您的快速響應。這個對我有用。 – Dips 2012-03-07 23:09:45
我喜歡第一個解決方案 – Dips 2012-03-07 23:12:07
@ user1193749是的,我認爲這對你來說最簡單。 – Jasper 2012-03-07 23:13:06