jQuery,选择器匹配未设置的类?

jQuery,选择器匹配未设置的类?,jquery,click,selector,behavior,removeclass,Jquery,Click,Selector,Behavior,Removeclass,我对一些jQuery代码上的classed bases开关有一个问题,我想知道我是否做错了什么或遇到了错误(可能是第一个) 参见本例: // Expecting only one run // Instead it keeps triggering $('.switch').click(function () { // Show message with active classes var classes = $(this).attr('class'); alert('

我对一些jQuery代码上的classed bases开关有一个问题,我想知道我是否做错了什么或遇到了错误(可能是第一个)

参见本例:

// Expecting only one run
// Instead it keeps triggering
$('.switch').click(function () {
    // Show message with active classes
    var classes = $(this).attr('class');
    alert('Classes: '+classes);

    // Remove class, it shouldn't trigger again?
    $(this).removeClass('switch')
})
()

我有一个带有类的简单HTML标记。jQuery脚本匹配该类并将其绑定到单击事件。如果该事件被触发,它将删除该类及其前面的内容,我希望它不会第二次匹配(换句话说,它应该只执行一次)


但是,每次都会执行代码。这是正常行为吗?

对dom更改使用事件委派:

$(document).on('click','.switch',function () {
  var classes = $(this).attr('class');
  alert('Classes: '+classes);
  $(this).toggleClass('switch')
});

使用

将处理程序附加到元素的事件。对于每个事件类型,每个元素最多执行一次处理程序


事件将自身附加到元素(以您现在使用它的方式),因此无论该元素发生什么情况,只要它仍然处于活动状态,事件仍然可以触发。
$('.switch')。单击(…)
将处理程序绑定到元素。更改元素的属性不会更改绑定到该元素的处理程序。谢谢,这对我很有用。one()解决方案看起来也不错,但在我的情况下似乎不可用。谢谢,我不得不使用Milind Anantwar的解决方案,但这也很有用。@SvenvandeScheur很高兴你找到了解决方案。
$('.switch').one('click',function () {