Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

セレクタの誤動作っぽいもの

jQueryをいじったらなぜか動かなくなってしまい、原因を探したら、意外とみおとしていたところにありました。案外おこるきがするので書きます。

今回は、変数にセレクタを代入したことが原因でした。 直す前(問題の)コード

$(function () {
    var $rform = $("#rform"),
        $menu = $rform.find("#option_menu"),
        $custom = $menu.find(".customCheckBox a"),
        (略)
    $rform.css3form().find("#option").click(function () {
        if("checked" == $(this).attr("checked")) {
            $menu.animate({
                width: "0"

直したコード

$(function () {
    var $rform = $("#rform");
    $rform.css3form();//ココです
    var $menu = $rform.find("#option_menu"),
        $custom = $menu.find(".customCheckBox a"),
        (略)
    $rform.find("#option").click(function () {
        if("checked" == $(this).attr("checked")) {
            $menu.animate({
                width: "0"

css3formとは、チェックボックスラジオボタンをデザインしやすくするプラグインを実行する関数です。 実行すると、.customCheckBox aというものができます。 問題のコードでは、作られる前にキャッシュしてしまっています。 意外とここではまってしまい、時間がかかりました。 (なぜか次の日に速攻でみつけました。一日寝てからみてみるのが効果あるっていう噂は本物でした。)

コードをいじって動かなくなった場合、セレクタのキャッシュをおってみるというのも考えてみるといいかもしれません。