$(".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