web-dev-qa-db-ja.com

jQuery .removeClass()が何もしないという奇妙な問題

要素にクラスを追加し、それらを削除して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に渡すと、問題なくその1つのクラスが削除されます。

コンテキストの問題であるか、currentTileが間違った要素である場合、addClassも失敗すると思いますか?誰かがここで何が起こっているのか分かりますか?

追加情報:jQuery最新(v.1.9.0だと思います)、jQuery UI v 1.10.0、Chrome v.24.0.1312.56 m


編集:問題はjQuery UIに直接関連しているようで、 このフィドル で発生していることがわかります。


編集2:これは jQueryのバグ として確認され、修正されました。

12
jbabey

.removeAttr('class')ではなく.removeClass()を使用してみてください。

デモ:

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

これがお役に立てば幸いです。ご不明な点がありましたらお知らせください。

11
Dom