假设我有这段代码:
$('.mask-preview:not(.selected)').click(function () {
$('.mask-preview.selected').removeClass('selected');
$(this).addClass('selected');
console.log("added");
});
现在,在具有class="mask-preview selected"
的元素上,不会调用此处理程序。当我在没有selected
的元素上调用它时,调用处理程序,并添加类。
但是现在,我仍然可以在该元素上调用该处理程序,如果添加selected
也是如此。事实上,“处理程序”没有“更新”到DOM。有没有办法动态地做到这一点?
每次if(element.hasClass())
答案 0 :(得分:1)
绑定仅发生一次,并且在更改元素时不会更改。
最简单的方法就是检查回调中的类。
$('.mask-preview').on('click', function() {
if ($(this).hasClass('selected')) {
...
} else {
...
}
});
编辑此答案已更新,感谢评论指出.on
中的选择器仅适用于后代,而不适用于已注册的元素本身。
答案 1 :(得分:0)
这样的东西?
$('#mask-preview').click(function () {
if ( !$(this).hasClass('selected') ) {
$(this).addClass('selected');
console.log("added");
} else {
$(this).addClass('not_selected');
console.log("added");
}
});
答案 2 :(得分:0)
可能.live
可以帮助您
$('.mask-preview:not(.selected)').live('click',function () {
$('.mask-preview.selected').removeClass('selected');
$(this).addClass('selected');
console.log("added");
});