短縮版
element.setAttribute("required", ""); //turns required on
element.required = true; //turns required on through reflected attribute
jQuery(element).attr('required', ''); //turns required on
$("#elementId").attr('required', ''); //turns required on
element.removeAttribute("required"); //turns required off
element.required = false; //turns required off through reflected attribute
jQuery(element).removeAttr('required'); //turns required off
$("#elementId").removeAttr('required'); //turns required off
if (edName.hasAttribute("required")) { } //check if required
if (edName.required) { } //check if required using reflected attribute
ロングバージョン
TJ Crowderが反映されたプロパティを指摘できると、次の構文が間違っていることがわかりました。
element.attributes["name"] = value; //bad! Overwrites the HtmlAttribute object
element.attributes.name = value; //bad! Overwrites the HtmlAttribute object
value = element.attributes.name; //bad! Returns the HtmlAttribute object, not its value
value = element.attributes["name"]; //bad! Returns the HtmlAttribute object, not its value
あなたはしなければならない通過するelement.getAttribute
とelement.setAttribute
:
element.getAttribute("foo"); //correct
element.setAttribute("foo", "test"); //correct
これは、属性に実際には特別なHtmlAttributeオブジェクトが含まれているためです。
element.attributes["foo"]; //returns HtmlAttribute object, not the value of the attribute
element.attributes.foo; //returns HtmlAttribute object, not the value of the attribute
属性値を「true」に設定すると、必要なHtmlAttributeオブジェクトではなく、誤ってStringオブジェクトに設定されます。
element.attributes["foo"] = "true"; //error because "true" is not a HtmlAttribute object
element.setAttribute("foo", "true"); //error because "true" is not an HtmlAttribute object
概念的には正しい型(型付き言語で表現)は次のとおりです。
HtmlAttribute attribute = new HtmlAttribute();
attribute.value = "";
element.attributes["required"] = attribute;
これが理由です:
getAttribute(name)
setAttribute(name, value)
存在します。内部のHtmlAttributeオブジェクトに値を割り当てる作業を行います。
これに加えて、いくつかの属性が反映されます。これは、Javascriptからより適切にアクセスできることを意味します。
//Set the required attribute
//element.setAttribute("required", "");
element.required = true;
//Check the attribute
//if (element.getAttribute("required")) {...}
if (element.required) {...}
//Remove the required attribute
//element.removeAttribute("required");
element.required = false;
あなたがしたくないことは、誤って.attributes
コレクションを使用することです:
element.attributes.required = true; //WRONG!
if (element.attributes.required) {...} //WRONG!
element.attributes.required = false; //WRONG!
テストケース
これにより、required
属性の使用に関するテスト、属性を通じて返された値、および反映されたプロパティの比較が行われました。
document.getElementById("name").required;
document.getElementById("name").getAttribute("required");
結果:
HTML .required .getAttribute("required")
========================== =============== =========================
<input> false (Boolean) null (Object)
<input required> true (Boolean) "" (String)
<input required=""> true (Boolean) "" (String)
<input required="required"> true (Boolean) "required" (String)
<input required="true"> true (Boolean) "true" (String)
<input required="false"> true (Boolean) "false" (String)
<input required="0"> true (Boolean) "0" (String)
.attributes
コレクションに直接アクセスするのは間違っています。DOM属性を表すオブジェクトを返します。
edName.attributes["required"] => [object Attr]
edName.attributes.required => [object Attr]
これは、.attributes
コレクトに直接話してはいけない理由を説明しています。属性の値を操作するのではなく、属性自体を表すオブジェクトを操作します。
必要な設定方法は?
required
属性を設定する正しい方法は何ですか?反映されるプロパティ、または属性を正しく設定することにより、2つの選択肢があります。
element.setAttribute("required", ""); //Correct
edName.required = true; //Correct
厳密に言えば、他の値は属性を「設定」します。ただし、Boolean
属性の定義で""
は、trueを示すには空の文字列にのみ設定する必要があると規定されています。次のメソッドはすべてブール属性を設定するために機能し、 required
ただし、使用しないでください。
element.setAttribute("required", "required"); //valid, but not preferred
element.setAttribute("required", "foo"); //works, but silly
element.setAttribute("required", "true"); //Works, but don't do it, because:
element.setAttribute("required", "false"); //also sets required boolean to true
element.setAttribute("required", false); //also sets required boolean to true
element.setAttribute("required", 0); //also sets required boolean to true
属性を直接設定するのは間違っていることをすでに学びました:
edName.attributes["required"] = true; //wrong
edName.attributes["required"] = ""; //wrong
edName.attributes["required"] = "required"; //wrong
edName.attributes.required = true; //wrong
edName.attributes.required = ""; //wrong
edName.attributes.required = "required"; //wrong
クリアする方法は?
しようとしているトリック削除required
属性は、それは偶然にそれを回すために簡単だということです。
edName.removeAttribute("required"); //Correct
edName.required = false; //Correct
無効な方法で:
edName.setAttribute("required", null); //WRONG! Actually turns required on!
edName.setAttribute("required", ""); //WRONG! Actually turns required on!
edName.setAttribute("required", "false"); //WRONG! Actually turns required on!
edName.setAttribute("required", false); //WRONG! Actually turns required on!
edName.setAttribute("required", 0); //WRONG! Actually turns required on!
反射し使用した場合.required
の特性を、あなたはまた、任意の使用することができます「falsey」それをオフにする値を、そしてtruthy値は、それをオンにします。ただし、明確にするために、trueとfalseに固執してください。
確認方法はrequired
?
.hasAttribute("required")
メソッドを通じて属性の存在を確認します。
if (edName.hasAttribute("required"))
{
}
ブール反射.required
プロパティを使用して確認することもでき ます。
if (edName.required)
{
}
required="false"
。標準を作成する前にテンプレートを作成したことがありますか?通常、条件付き属性は苦痛です。属性値にそのブール値を入れるだけの方が簡単です...