jQuery中.removeClass()无效的奇怪问题

12

我有一些代码,它向一个元素添加类,然后尝试在1秒后将其删除并添加不同的类。我得到一些非常奇怪的行为,甚至无法在简单的 jsfiddle示例中重现。

这是我所拥有的相关JavaScript代码:

console.log('before destroyed: ' + currentTile.get(0).className);
currentTile.addClass(classes.destroyed);
console.log('after destroyed: ' + currentTile.get(0).className);

setTimeout(function () {
    console.log('before blanking: ' + currentTile.get(0).className);
    currentTile.removeClass().addClass(classes.blank + ' ui-draggable');
    console.log('after blanking: ' + currentTile.get(0).className);
}, 2000);

这里是控制台输出:

enter image description here

如您所见,添加destroyed类没有问题,但在setTimeout中调用removeClass()似乎没有任何效果,然后.addClass(classes.blank + ' ui-draggable');工作正常。另外,如果我只传递一个类到removeClass,它也可以正常删除那个类。

如果这是关于上下文或currentTile是错误的元素,那么我认为addClass也会失败吗?有人知道这里发生了什么吗?

额外信息:jQuery最新版本(可能是v.1.9.0),jQuery UI v 1.10.0,Chrome v.24.0.1312.56 m


编辑:问题似乎直接与jQuery UI有关,并且可以在这个fiddle中看到。


编辑2:这被确认为jQuery的bug,并已经修复。


@Sparky Docs 上说,如果你不传递任何参数,它会删除所有类,而且在我链接的 fiddle 中也是这样工作的。 - jbabey
当你们回复时,我去查找了它。是的,我明白了。 - Sparky
这个对我来说似乎是有效的:http://jsfiddle.net/MvvmJ/1/ - Explosion Pills
@Sparky 我已经删除了对 draggabledroppable 的调用,但问题仍然存在(元素缺少预期的 ui-draggable 类)。 - jbabey
1
@Sparky 完全移除jQuery UI的JavaScript和CSS文件,修复了该问题removeClass()函数按预期工作。有人能找出jQuery UI中是什么破坏了这个功能(即使我从未调用过其中的任何方法)吗? - jbabey
显示剩余9条评论
1个回答

11

尝试使用.removeAttr('class')而非.removeClass()

演示:

http://jsfiddle.net/MvvmJ/8/

希望能有所帮助,如果有任何问题,请告诉我!


2
谢谢你的回答。虽然这是我将要采取的解决方法,但我对为什么jQuery UI会破坏removeClass的原因还是很好奇的 :P - jbabey
这太奇怪了。在本地主机上,我的removeClass()代码完美运行,但当我将其发布到远程服务器时,它就无法工作了。所有代码部分都是相同的。jQuery和其他脚本版本也是相同的。有人有什么想法吗? - QMaster
2
@jbabey,你有没有弄清楚为什么jQuery UI会破坏removeClass()吗?我们认为我们遇到了同样的问题,很想知道原因... - jeesty
2
@jeesty,我已经报告了这个错误并且已经修复,所以你不应该再看到同样的问题了。http://bugs.jqueryui.com/ticket/9015 - jbabey
现在正在发生这件事情对我来说。 - Nejthe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接