0

假设我有这个代码:

$('.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())

4

3 回答 3

1

绑定只发生一次,并且在您更改元素时不会更改。

最简单的方法是检查回调中的类。

$('.mask-preview').on('click', function() {
    if ($(this).hasClass('selected')) {
        ...
    } else {
        ...
    }
});

编辑此答案已更新,感谢评论指出选择器.on仅适用于后代,而不适用于注册元素本身。

于 2012-10-19T12:58:14.533 回答
0

像这样的东西?

$('#mask-preview').click(function () {
    if ( !$(this).hasClass('selected') ) {
        $(this).addClass('selected');
        console.log("added");
    } else {
        $(this).addClass('not_selected');
        console.log("added");
    }
});
于 2012-10-19T13:02:16.880 回答
0

may be .live can help you in this

$('.mask-preview:not(.selected)').live('click',function () {
    $('.mask-preview.selected').removeClass('selected');
    $(this).addClass('selected');
    console.log("added");
});​

Live Demo

于 2012-10-19T13:08:45.373 回答