2

これは非常に基本的な質問であるため、これについてはいくつかの担当者ポイントを失うことになると確信していますが、「#」を使用してIDで選択するjQueryセレクターで何が間違っているのか理解できません。

私の文書でこの要素を与えられた:

<%= Html.CheckBox("IsAlwaysValid", true,
                    new { onchange = "showHideValidSetList()", id = "IsAlwaysValidCheckBox" })%>

(これは次のマークアップを出力します:

<input checked="checked" id="IsAlwaysValidCheckBox" name="IsAlwaysValid" onchange="showHideValidSetList()" type="checkbox" value="true" /><input name="IsAlwaysValid" type="hidden" value="false" />

)。

次に、jQueryセレクターを使用してこの関数を実行します。

<script type="text/javascript">
    function showHideValidSetList() {
        if ($("#IsAlwaysValidCheckBox").checked) {
            alert("IsAlwaysValidCheckBox is checked");
            return;
        }
        else {
            alert("IsAlwaysValidCheckBox is NOT checked");
            return;
        }
    }
</script>

javascriptDOMを使用した場合とまったく同じである必要があります。

<script type="text/javascript">
    function showHideValidSetList() {
        if (document.getElementById("IsAlwaysValidCheckBox").checked) {
            alert("IsAlwaysValidCheckBox is checked");
            return;
        }
        else {
            alert("IsAlwaysValidCheckBox is NOT checked");
            return;
        }
    }
</script>

右?ただし、javascriptバージョンは期待どおりに機能しますが、jQueryバージョンは常に「else」ブランチを取り、チェックボックスの状態を実際に確認していないことを示しています。

私は何が間違っているのですか?

よろしくお願いします。

4

6 に答える 6

4

これを使って:

if ($(checkBoxControl).attr("checked")) {

これの代わりに:

if ($("#IsAlwaysValidCheckBox").checked) {

jQueryセレクターは(チェックボックスなどの)DOM要素を返すように見えますが、実際には、というメソッドを持たないjQueryオブジェクトを返しますcheckedこれは、非圧縮のjqueryソースコード(現在のリリース、バージョン1.3.2から)で最も明確に確認できます。

jQuery.fn = jQuery.prototype = {
    init: function( selector, context ) {
        // ...
        // Handle $(DOMElement)
        if ( selector.nodeType ) {
             this[0] = selector;
             this.length = 1;
             this.context = selector;
             return this;
        }
        // ...
    }
}

興味深いjQueryメソッドの多く(animate、attr、htmlなど)はで動作しthis.contextます。これは、セレクターを適用するたびに指定または再定義されます。

于 2009-10-19T14:50:37.463 に答える
3
$("#IsAlwaysValidCheckBox").checked

$("#IsAlwaysValidCheckBox")要素ではなくjQueryオブジェクトを返すため、正しくありません。jQueryオブジェクトには呼び出されるプロパティがないcheckedため、。を入力していelseます。

あなたが欲しい:

$("#IsAlwaysValidCheckBox").val()

また:

$("#IsAlwaysValidCheckBox:checked").length > 0

また:

$("#IsAlwaysValidCheckBox").attr("checked") === "checked"

また:

$("#IsAlwaysValidCheckBox")[0].checked

また:

$("#IsAlwaysValidCheckBox").get(0).checked
于 2009-10-19T14:51:23.157 に答える
1

使ってみましたか

if ($("#IsAlwaysValidCheckBox").attr("checked")) {
于 2009-10-19T14:51:39.930 に答える
1

これを使用する必要があります:

$("#IsAlwaysValidCheckBox").attr("checked") 

チェックボックスがオンになっているかどうかを判断します。

于 2009-10-19T14:52:07.293 に答える
1

簡単なことを行うさらに別の方法:

$('#IsAlwaysValidCheckBox:checked').length

selector:checked は、チェックされた要素を返す jquery 固有のものです。長さは、返される要素があるかどうかをチェックします。

同じことを行う多くの方法。

于 2009-10-19T14:54:06.930 に答える
0

これを試して:

<script type="text/javascript">
    function showHideValidSetList() {
        if ($("#IsAlwaysValidCheckBox").val()) {
            alert("IsAlwaysValidCheckBox is checked");
            return;
        }
        else {
            alert("IsAlwaysValidCheckBox is NOT checked");
            return;
        }
    }
</script>

valメソッドは、値をチェックする「クロスエレメント」の方法のようなものです...テキストボックス、選択リスト、またはチェックボックスのいずれであるか... .val()を使用して値を取得/設定できます:- )。

于 2009-10-19T14:51:17.340 に答える