Jquery removeClass/addClass不工作

Jquery removeClass/addClass不工作,jquery,addclass,removeclass,Jquery,Addclass,Removeclass,我需要在单击时将类添加到元素,如果已经有类,则将其删除。如果我删除“removeClass”行,“addClass”工作正常 $(".tagy li").click(function() { $(this).find(":input").click(); $(this).toggleClass('lselected'); }); 你能帮帮我吗,我做错了什么?非常感谢。 米哈尔 若我通过点击输入来删除行,toggleClass可以正常工作,但我需要保留它。测试:使用 $(this).

我需要在单击时将类添加到元素,如果已经有类,则将其删除。如果我删除“removeClass”行,“addClass”工作正常

$(".tagy li").click(function() {
$(this).find(":input").click();   

$(this).toggleClass('lselected');

});
你能帮帮我吗,我做错了什么?非常感谢。 米哈尔


若我通过点击输入来删除行,toggleClass可以正常工作,但我需要保留它。测试:

使用

$(this).removeClass('lselected');
您需要在removeClass()中指定类名

就像@josh Crozier说的,你可以像这样减少代码

$(".tagy li").click(function() {
    $(this).find(":input").click();

    $(this).toggleClass('lselected');

});

哈哈!在我看来,这似乎是
事件的用例。stopPropagation()


因为您的输入元素是
li
的子元素,并且任何事件都发生在冒泡到父元素的子元素上。这就是问题的根源。为此,您需要使用
event.stopPropagation()
停止事件冒泡


$(“.tagy li”)。单击(函数(){
$(this.find(“:input”).focus();
$(this.toggleClass('lselected');
});
$(“.tagy li”).find(“:input”).on('click focus',函数(e){
e、 stopPropagation();//停止要冒泡的事件
});
.l已选定{
背景:红色;
}

  • aasdfasfd

以下是修复代码的方法:

$(".tagy li").click(function (e) {
    $(this).toggleClass('lselected')
           .find(':checkbox')
           .prop('checked', $(this).hasClass('lselected'));
});

但请注意,HTML标记无效,LI不能是DIV元素的直接子元素,必须用UL包装。

为什么不使用
.toggleClass()
?什么不起作用?你没有描述它。提供最少的样本来复制问题本身。顺便问一下,触发单击子元素的目的是什么?因为这样,您将重新触发父对象上的单击事件。所以这可能是你们的问题,事实上,你们移除了类,但因为你们触发了点击子体,你们添加了类,但因为你们触发了点击子体。。。您可以改为使用:
$(this.find(“:input”).triggerHandler('click')
如果一些jQuery单击事件绑定在
:input
上,问题是,该函数不会向元素添加类。只需将其更改为
  • 。测试:确定,所以尝试使用:
    $(“.tagyli”)。单击(函数(e){if(e.isTrigger)return;//代码的其余部分})问题是您在父单击处理程序的子代上触发了单击事件。removeClass()
    将删除所有类…或更短的
    $(此)。toggleClass('lselected')。查找(“:input”)。单击()我尝试了这个,但仍然不起作用,所以我猜问题不在函数中。如果我点击“li”,它将从
  • 变为
  • 。测试:我可以看到输入是一个复选框,实际上,只需要设置相关的checked属性,不需要触发click/focusevent@Jai这是LI的HTML标记,但OP自己并没有发布它:
  • 是的,我刚刚看到它@A.沃尔夫
    $(".tagy li").click(function (e) {
        $(this).toggleClass('lselected')
               .find(':checkbox')
               .prop('checked', $(this).hasClass('lselected'));
    });