2

HTMLページに次のコードがあります

jQuery("input[name='newstate']").change(function(){
    if(jQuery(this).attr("checked")) {
        jQuery('input[name="new-state-name"]').show();
    } else {
        jQuery('input[name="new-state-name"]').hide();
    }
});

しかし、jquery lint は次のメッセージを表示します。

返されるコレクションが異なることがわかっている場合にのみ、同じセレクターを複数回使用する必要があります。たとえば、セレクターに準拠する可能性のある要素をページに追加した場合

コードを変更してこのメ​​ッセージを削除するにはどうすればよいですか

4

2 に答える 2

3

この.toggle()メソッドは、次のブール値を受け入れますshowOrHide

jQuery("input[name='newstate']").change(function(){
    // You can use this.checked instead of jQuery(this).attr("checked");
    jQuery('input[name="new-state-name"]').toggle(this.checked);
});

このようにして、入力の表示状態が常に入力と一致することがわかります (つまり、以前の状態に関係なく、チェックすると表示されます)。つまり、なしで使用すると、たとえば入力の表示状態がハンドラーの外部から操作された場合、状態と表示状態が同期しなくなるリスクがあります。new-state-namenewstatetoggle()showOrHidenewstatenew-state-namenew-state-namenewstate change()


もちろん、セレクターを 1 回だけ実行するために、結果セットを一時変数に割り当てることもできます。

jQuery("input[name='newstate']").change(function(){
    var newStateInput = jQuery('input[name="new-state-name"]');
    if(this.checked) {
        newStateInput.show();
        // ... more here
    } else {
        newStateInput.hide();
        // ... and/or here
    }
});

表示/非表示以上のことをしたい場合。


編集
おっと、残念なタイプミス。最初のソリューションにするshow()必要があります。toggle()

于 2010-11-08T10:20:25.480 に答える
1
jQuery("input[name='newstate']").change(function(){
      jQuery('input[name="new-state-name"]').toggle();
});
于 2010-11-08T10:15:07.973 に答える