Javascript jQuery丢失了添加的类

Javascript jQuery丢失了添加的类,javascript,jquery,Javascript,Jquery,我有几个按钮带有一个类mybtn。我需要在点击的那个上设置一个类mybtn active,并将其从当前拥有它的类中删除 $('.mybtn').on('click', function () { $('.mybtn-active').removeClass('mybtn-active'); $(this).addClass('mybtn-active'); }); 当我点击一个按钮时,当前活动的类将丢失,这是应该的。但是点击的那一个没有得到这个类 我用Chrome调试器完成了脚

我有几个按钮带有一个类
mybtn
。我需要在点击的那个上设置一个类
mybtn active
,并将其从当前拥有它的类中删除

$('.mybtn').on('click', function () {
    $('.mybtn-active').removeClass('mybtn-active');
    $(this).addClass('mybtn-active');
});
当我点击一个按钮时,当前活动的类将丢失,这是应该的。但是点击的那一个没有得到这个类

我用Chrome调试器完成了脚本,它运行正常。当代码退出脚本时,它将丢失该类。有什么想法吗

[解决方案]作者@musefan 按钮是背景中的
标记,我没有想到这一点,因为这是我继承的代码,我没有编写HTML。这就是问题所在。查看已接受的答案。

您缺少一个

在第二行的选择器中

应该是

$('.mybtn-active').removeClass('mybtn-active');
你错过了一次机会

在第二行的选择器中

应该是

$('.mybtn-active').removeClass('mybtn-active');

正如我在评论中提到的,这是打字错误。您必须将
$('mybtn-active')
更改为
$('.mybtn-active')
。请看片段

$('.mybtn')。在('click',函数(){
$('.mybtn-active').removeClass('mybtn-active');
$(this.addClass('mybtn-active');
});
.mybtn处于活动状态{
字体大小:25px;
}

按钮1
按钮2
按钮3

按钮4
正如我在评论中提到的,这是打字错误。您必须将
$('mybtn-active')
更改为
$('.mybtn-active')
。请看片段

$('.mybtn')。在('click',函数(){
$('.mybtn-active').removeClass('mybtn-active');
$(this.addClass('mybtn-active');
});
.mybtn处于活动状态{
字体大小:25px;
}

按钮1
按钮2
按钮3

按钮4
假设

我将在这里进行一场大规模的赌博,但这是我能想到的唯一一件能够解释OP所描述的内容的事情,并且在代码中实际可能发生的事情。我们需要OP提供HTML来验证我的假设

我还假设示例代码中的类选择器是问题的输入错误,而在原始代码中不是问题(正如OP特别指出的那样,删除类是正确的)

此后,OP在对该答案和其他答案的评论中验证了我的假设

问题

我想您的问题是,您正在使用
a
元素,而您的单击实际上是在重新加载页面,或者使用同样具有相同效果的按钮,从而导致所有类都恢复为默认值

解决方案

您可以使用click事件的参数修复此问题,如下所示:

$('.mybtn').on('click', function (e) {
    e.preventDefault(); // This prevent the hyperlink from reloading the page.
    $('.mybtn-active').removeClass('mybtn-active');
    $(this).addClass('mybtn-active');
});

假设

我将在这里进行一场大规模的赌博,但这是我能想到的唯一一件能够解释OP所描述的内容的事情,并且在代码中实际可能发生的事情。我们需要OP提供HTML来验证我的假设

我还假设示例代码中的类选择器是问题的输入错误,而在原始代码中不是问题(正如OP特别指出的那样,删除类是正确的)

此后,OP在对该答案和其他答案的评论中验证了我的假设

问题

我想您的问题是,您正在使用
a
元素,而您的单击实际上是在重新加载页面,或者使用同样具有相同效果的按钮,从而导致所有类都恢复为默认值

解决方案

您可以使用click事件的参数修复此问题,如下所示:

$('.mybtn').on('click', function (e) {
    e.preventDefault(); // This prevent the hyperlink from reloading the page.
    $('.mybtn-active').removeClass('mybtn-active');
    $(this).addClass('mybtn-active');
});

$('mybtn-active')
不会选择类
mybtn-active
的任何元素。
$('mybtn-active')
应该是
$('.mybtn-active')
“当代码退出脚本时,它只会丢失类。有什么想法吗?”-类本身不会“丢失”。。。您的代码片段不足以重现问题,请阅读。它运行良好@010Pixel:这是一个可怕的建议。你为什么要那样做?只是增加了复杂性和额外的性能开销,只是为了把它放在一行??如果您不喜欢多行,只需删除换行符,无需在过程中使代码变得更糟。
$('mybtn-active')
不会选择类
mybtn-active的任何元素。
$('mybtn-active')
应该是
$('mybtn-active')
“当代码退出脚本时,它会丢失类。有什么想法吗?”-类不会“丢失”你的代码片段本身不足以重现问题,所以请阅读。它运行良好@010Pixel:这是一个可怕的建议。你为什么要这样做?只是为了把它放在一行上而增加了复杂性和额外的性能开销??如果你不喜欢多行,只需删除换行符,就不需要让代码为或者在这个过程中,可能是这样,但是OP说那个部分在工作…是把类添加到
这个
中被认为是不起作用的。所以如果OP说的是正确的,那么可能只是问题中的一个输入错误。可能,但是OP说那个部分在工作…是把类添加到
这个
中被认为是不起作用的工作。如果OP所说的是正确的,那么可能只是问题中的一个输入错误。是的,但这不是OP所描述的问题。他们清楚地说删除类的部分工作正常,所以肯定只是问题中的一个输入错误。OP说问题在于将类应用到单击的元素。@musefan据了解,snippet应用类工作正常。是的,但问题不仅仅是一段代码,它也是问题的描述。很明显,OP需要提供更多信息,但我的观点是,您的答案并不能解决所描述的问题