HTMLチェックボックスのチェックされた属性の適切な値は何ですか?


436

HTMLでチェックボックス入力を作成する方法は誰でも知っています。

<input name="checkbox_name" id="checkbox_id" type="checkbox">

わからないこと-チェックされたチェックボックスの技術的に正しい値は何ですか?私はこれらすべての仕事を見てきました:

<input name="checkbox_name" id="checkbox_id" type="checkbox" checked>
    <input name="checkbox_name" id="checkbox_id" type="checkbox" checked="on">
    <input name="checkbox_name" id="checkbox_id" type="checkbox" checked="yes">
    <input name="checkbox_name" id="checkbox_id" type="checkbox" checked="checked">
    <input name="checkbox_name" id="checkbox_id" type="checkbox" checked="true">

それは問題ではないという答えですか?ここでは、仕様自体から正しいとマークされた回答の証拠はありません。

チェックボックス(およびラジオボタン)は、ユーザーが切り替えることができるオン/オフスイッチです。コントロール要素のchecked属性が設定されている場合、スイッチは「オン」です。フォームが送信されると、「オン」のチェックボックスコントロールのみが成功します。フォームの複数のチェックボックスが同じコントロール名を共有する場合があります。したがって、たとえば、チェックボックスを使用すると、ユーザーは同じプロパティの複数の値を選択できます。INPUT要素は、チェックボックスコントロールを作成するために使用されます。

スペック作成者は正しい答えは何だと思いますか?エビデンスに基づく回答を提供してください。


質問の要約では、checked属性の値について言及しますが、質問の説明では、checkedチェックボックスの正しい値について説明します。チェックボックスの「値」は、checked属性とは異なります。質問の説明は、属性の値も意味していると思います。おそらく、質問の説明を調整したいと思います。チェックボックスの「値」については、stackoverflow.com
questions / 14323899 /…

回答:


451

厳密に言うと、意味のあるものを置く必要があります。ここの仕様によると、最も正しいバージョンは次のとおりです。

<input name=name id=id type=checkbox checked=checked>

HTMLのために、あなたも使用することができ、空の属性構文をchecked=""、あるいは単にchecked(厳格なXHTMLのために、これがされてサポートされていません)。

ただし、事実上、ほとんどのブラウザーは引用符の間のほぼすべての値をサポートします。次のすべてがチェックされます。

<input name=name id=id type=checkbox checked>
<input name=name id=id type=checkbox checked="">
<input name=name id=id type=checkbox checked="yes">
<input name=name id=id type=checkbox checked="blue">
<input name=name id=id type=checkbox checked="false">

また、次のチェックボックスのみがオフになります。

<input name=name id=id type=checkbox>

に関するこの同様の質問も参照してくださいdisabled="disabled"


39
これは間違っています。あなたが見れば仕様、それは言う:checked (checked)checked属性が値を持つことができる手段」 『確認』)のみ。checked許容値は、他の人のどれもありません。ブール属性はオミットすべてにあなたを許す除いた値とてもchecked受け入れられますなどchecked="checked"
クエンティン・

14
HTML5指向W3のページが言うcheckedchecked=""checked="checked"OKです。w3.org/TR/html-markup/input.checkbox.html
Ryan Williams

1
@クエンティン申し訳ありませんが、その文は私には意味がありません。属性の名前以外はすべて省略できるということですか?以外をすべて省略できる場合は"checked"、属性名なしで単にを記述して、正しく機能させることができるからです。
Hannele 2014年

4
@Quentin tl、dr:セマンティクスですが、空の属性構文ではなく属性の名前のみを指定します
Hannele 2014年

1
boolean / empty属性を省略しチェックボックスチェックされたままの場合(ページの再読み込み時)、autocomplete = "off"を使用して、ブラウザが自動的にチェックしないようにします。 checked
ハンドル

58

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" />

以下は無効です:

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

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

<input />

勧告

有効なXHTML、使用を書くことを気にしている場合checked="checked"以来、<input checked>無効なXHTML(しかし、有効なHTML)および他の選択肢が読みにくくしているです。それ以外の<input checked>場合は、短いので使用してください。


2
編集2にロールバックして、仕様を最初に維持することにしました。例を最初にするのが一般的な方法ですが、これが、例を挙げている現在の上位の回答に関して、この回答の差別化の側面であると感じています。しかし提案をありがとう:-)
Ciro Santilli郝海东冠状病六四事件法轮功

2
これは正解だと思います。欠席は偽りであることを強調しています。= "true"は機能しますが、= "false"は期待どおりに機能し、機能しないことを意味します。
aamarks

35
<input ... checked />
<input ... checked="checked" />

それらは同様に有効です。そしてJavaScriptでは:

input.checked = true;
input.setAttribute("checked");
input.setAttribute("checked","checked");

4
setAttributeはDOM マークアップを変更します。プロパティを割り当てる必要はありません。
user2864740

input.setAttribute("checked")TypeError: 'Element'で 'setAttribute'を実行できませんでした:2つの引数が必要ですが、1つしか存在しません
Ivan Rave

@IvanRave一部のブラウザはそれについて知識を持っていますが、他は正常に動作します。
Niet the Dark Absol 2017


5
  1. チェック済み
  2. checked = ""
  3. checked = "チェック済み"

    同等です。


仕様チェックボックス '----ⓘchecked = "checked"または ""(空の文字列)またはempty に従って、要素が選択されたコントロールを表すことを指定します。---'


2

チェック済みをfalseにする唯一の方法は、値を省略することです。Angular 1.xでは、これを行うことができます:

  <input type="radio" ng-checked="false">

チェックを外す必要がある場合、これはより正気です。


2

これは役立つと思います:


まず、MicrosoftとW3.orgのすべての仕様を読んでください。
チェックボックスの実際の要素の設定は、UIや属性ではなく、ELEMENT PROPERTYで行う必要があることがわかります。
$('mycheckbox')[0].checked

次に、checked属性が文字列「true」、「false」を返すことに注意する必要があります。
なぜこれが重要なのですか。正しいタイプを使用する必要があるからです。ブール値ではなく文字列。これは、チェックボックスを解析するときにも重要です。
$('mycheckbox')[0].checked = "true"

if($('mycheckbox')[0].checked === "true"){ //do something }

また、「チェックされた」属性は、最初にチェックボックスの値を設定するためのものであることを認識する必要があります。要素がDOMにレンダリングされると、これはあまり効果がありません。Webページが読み込まれ、最初に解析されるときに、これが機能することを想像してください。
これについては、IEの設定に従います。<input type="checkbox" checked="checked"/>

最後に、チェックボックスの混乱の主な側面は、チェックボックスのUI要素が要素のプロパティ値と同じでないことです。それらは直接相関しません。.netで作業している場合、ユーザーがチェックボックスを「チェック」すると、コントローラーに渡された実際のブール値が反映されないことがわかります。UIを設定するために、私は両方$('mycheckbox').val(true);$('mycheckbox').attr('checked', 'checked');


つまり、チェックされたチェックボックスには、次のものが必要です。
初期DOM:<input type="checkbox" checked="checked">
要素プロパティ:$('mycheckbox')[0].checked = "true";
UI:$('mycheckbox').val(true);および$('mycheckbox').attr('checked', 'checked');


-3

まあ、それを使用するために私は問題とは思わない(無効化および読み取り専用と同様)、個人的にはcheck = "checked"を使用しますが、JavaScriptでそれらを操作しようとしている場合は、true / falseを使用します


5
いいえ。それは(それがために重要問題でないdisabledreadonly、ブラウザのエラー回復がかなり良い場合でも、あまりにも)。JSで属性を操作する場合は、checkedまたはを使用する必要がありますremoveAttribute('checked')checked プロパティがかかりますtruefalse
クエンティン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.