web-dev-qa-db-ja.com

チェックおよび選択された値はどの値が偽ですか?

W3仕様によれば、あなたはそうすべきだと思う

<input type="checkbox" checked="checked" />

そして

 selected="selected"

しかし、ほとんどのブラウザは、「CHECKED」と書くだけで値を与えません。したがって、属性を含めると、(一貫して)falseと見なされる値がありますか?

53
mpen

値なしがあるため、チェックボックスがオフになります。 checked属性が存在する場合、設定する値に関係なく、チェックボックスがチェックされます。

<input type="checkbox" checked />
<input type="checkbox" checked="" />
<input type="checkbox" checked="checked" />
<input type="checkbox" checked="unchecked" />
<input type="checkbox" checked="true" />
<input type="checkbox" checked="false" />
<input type="checkbox" checked="on" />
<input type="checkbox" checked="off" />
<input type="checkbox" checked="1" />
<input type="checkbox" checked="0" />
<input type="checkbox" checked="yes" />
<input type="checkbox" checked="no" />
<input type="checkbox" checked="y" />
<input type="checkbox" checked="n" />

最新のすべてのブラウザーでチェックされたすべてをレンダリングします(FF3.6、Chrome 10、IE8)。

91
mpen

checkedおよびselected属性には、属性名のコピーと(HTML 5以降の)空の文字列の2つの値のみが許可されます。他の値を指定するとエラーになります。

属性を設定したくない場合は、属性全体を省略する必要があります。

HTML 4 では、値以外のすべてを省略できることに注意してください。 HTML 5 これは、名前以外のすべてを省略するように変更しました(実質的な違いはありません)。

したがって、属性の完全な(cAsEのバリエーションは別として)有効な表現のセットは次のとおりです。

<input ... checked="checked"> <!-- All versions of HTML / XHTML -->
<input ...          checked > <!-- Only HTML 4.01 and earlier -->
<input ... checked          > <!-- Only HTML 5 and later -->
<input ... checked=""       > <!-- Only HTML 5 and later -->

Text/html(HTMLまたはXHTML)として提供されるドキュメントは、タグスープパーサーを介してフィードされ、チェックされた属性(任意の値)の存在は「この要素をチェックする必要があります」として扱われます。したがって、無効ではあるが、checked="true"checked="yes"、およびchecked="false"はすべて、チェックされた状態をトリガーします。

属性に異なる値を指定した場合、XML解析モードでどのエラーリカバリメカニズムが使用されているかを調べる傾向はありませんでしたが、expect HTMLおよび/または単純なエラー回復の同じ方法でそれを扱います:属性がある場合、要素がチェックされます。

(そして、上記はすべてselectedに適用されるのと同様にcheckedにも適用されます。)

35
Quentin

値は偽とみなされません、属性がない場合のみです。ただし、無効な値は多数あり、一部の実装では特定の無効な値をfalseと見なす場合があります。

HTML5仕様

http://www.w3.org/TR/html5/forms.html#attr-input-checked

無効化されたコンテンツ属性はブール属性です。

http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes

要素上のブール属性の存在は真の値を表し、属性の不在は偽の値を表します。

属性が存在する場合、その値は、空の文字列か、属性の正規名と大文字と小文字を区別しないASCIIで、先頭または末尾に空白を含まない)の値である必要があります。

結論

以下は、有効、同等、およびtrueです。

<input type="checkbox" checked />
<input type="checkbox" checked="" />
<input type="checkbox" checked="checked" />
<input type="checkbox" checked="ChEcKeD" />

以下はinvalidです。

<input type="checkbox" checked="0" />
<input type="checkbox" checked="1" />
<input type="checkbox" checked="false" />
<input type="checkbox" checked="true" />

falseの唯一の有効な構文は、属性がないことです。

<input type="checkbox" />

推奨事項

有効なXHTMLの作成を気にする場合は、checked="checked"が無効であり、他の選択肢は読みにくいため、<input checked>を使用します。それ以外の場合は、<input checked>を短くしてください。

空の文字列は、原則としてfalseです。

どうやら、空の文字列はすべてのブラウザで空と見なされておらず、checked属性の存在はチェックされていることを意味します。したがって、属性全体が存在するか、省略されている必要があります。

4
Orbling

実際、HTML 4.01仕様では、これらの属性には値は必要ないとされています。私は個人的に、値を提供するとこれらのコントロールが選択されていない状態になることはありません。

selected および checked の仕様文書へのそれぞれのリンクを次に示します。

編集:Firebugは、checked属性の引用符で囲まれた値に関係なく、チェックボックスをチェック済みとしてレンダリングします(値なしで「checked」と入力するだけです) 、およびIE 8の開発者ツールにより、checked = "checked"が強制されます。ただし、チェックボックスのレンダリング状態を変更する可能性のある他のブラウザに同様のツールが存在するかどうかはわかりません。

4
jwheron