1

チェックボックスの入力状態を保存するためにgarlic.jsを使用しています(http://garlicjs.org/)。これはうまく機能しますが、何らかの理由で、ページのリロード後にgarlic.jsによって入力がチェックされたときにjQueryが認識しません。

私はおそらくここで何かが欠けていますが、それが何であるかはわかりません。

たとえば#myInput:checked ~ .wonka {width: 200px}、スタイルシートで設定した場合、Cssはそれを認識し.wonka、ページの読み込みと入力がニンニクによってその値を取得するたびにスタイルを適用します。もちろん、兄弟セレクターの使用は非常に制限されています(たとえば、クラスが本体にある場合、それはできません)。

jQueryで同様のことを行うと、機能しません。

// This is not working

if ($("#myInput").is(":checked")) {
    $("body").addClass("wonka");
}


// Neither this

if ($("#myInput").attr("checked")==true) {
    $("body").addClass("wonka");
}

注:これは、ユーザーがクリックしたときではなく、ページが読み込まれたときまたは更新されたときにすぐに発生する可能性があります。重要なのは、ページが更新されたとき(または他のタブからロードされたとき)に再度起動することです。そうすれば、更新後と同じになります。

チェックボックスが「クリック」または「ホバー」されたときに他のイベントを発生させることができます。このように、例えば:

$("#myInput").on("change", function(){
    $("body").addClass("wonka");
});

しかし、繰り返しますが、これは問題ではありません。jQueryが入力状態を認識しないのはなぜですか?間違ったコードを使用していますか?

4

3 に答える 3

3

これが質問の最終的なコードです。@leemo が言うように、この問題は、DOM の準備が整った後に Garlic.js が入力をチェックしたために発生するため、ウィンドウのロード時にここのコードが起動し、問題を回避します。

$(window).on("load",function() {
    //the .is(":checked) and .attr("checked")==true methods works fine here too
    if ($('#myInput').get(0).checked == true) {
        $("body").addClass("wonka");
    }  
 });
于 2013-03-24T15:08:40.497 に答える
1

私の疑いは、ページのリロード時に、 $(document).ready() が呼び出された後に保存された状態が適用されていることです。したがって、jQuery が状態をチェックすると、実際にはチェックされていないため、false になります。

テストを遅らせることを検討してください。おそらく代替として使用$(window).on("load", function(){...})します。

于 2013-03-24T05:51:29.090 に答える
0

チェックボックスがチェックされているかどうかを判断するために DOM オブジェクトを使用すると、常に一貫性が保たれます。jQuery では、次の方法でこれを行うことができます。

if ($('#myInput').get(0).checked == true) {
  // element is checked
}

他の方法は、すべてのブラウザー/jQuery バージョンで動作することが必ずしも保証されているわけではありません。jQuery でチェックボックスの「チェック済み」を設定しますか? .

于 2013-03-24T04:25:23.193 に答える