เวอร์ชั่นสั้น
element.setAttribute("required", "");
element.required = true;
jQuery(element).attr('required', '');
$("#elementId").attr('required', '');
element.removeAttribute("required");
element.required = false;
jQuery(element).removeAttr('required');
$("#elementId").removeAttr('required');
if (edName.hasAttribute("required")) { }
if (edName.required) { }
เวอร์ชันยาว
เมื่อ TJ Crowder สามารถชี้ให้เห็นคุณสมบัติที่สะท้อนแล้วฉันได้เรียนรู้ว่าไวยากรณ์ต่อไปนี้ไม่ถูกต้อง :
element.attributes["name"] = value;
element.attributes.name = value;
value = element.attributes.name;
value = element.attributes["name"];
คุณต้องผ่านelement.getAttribute
และelement.setAttribute
:
element.getAttribute("foo");
element.setAttribute("foo", "test");
เนื่องจากแอตทริบิวต์มีวัตถุHtmlAttributeพิเศษ:
element.attributes["foo"];
element.attributes.foo;
การตั้งค่าแอตทริบิวต์เป็น "true" แสดงว่าคุณตั้งค่าเป็นวัตถุStringโดยไม่ได้ตั้งใจแทนที่จะเป็นวัตถุHtmlAttribute ที่ต้องการ:
element.attributes["foo"] = "true";
element.setAttribute("foo", "true");
แนวความคิดความคิดที่ถูกต้อง (แสดงในภาษาที่พิมพ์) คือ:
HtmlAttribute attribute = new HtmlAttribute();
attribute.value = "";
element.attributes["required"] = attribute;
นี่คือเหตุผล:
getAttribute(name)
setAttribute(name, value)
มีอยู่ พวกเขาทำงานในการกำหนดค่าให้กับวัตถุ HtmlAttribute ภายใน
บนนี้คุณลักษณะบางอย่างจะสะท้อนให้เห็นถึง ซึ่งหมายความว่าคุณสามารถเข้าถึงได้ดียิ่งขึ้นจาก Javascript:
element.required = true;
if (element.required) {...}
element.required = false;
สิ่งที่คุณไม่ต้องการทำคือใช้.attributes
คอลเลกชันโดยไม่ได้ตั้งใจ:
element.attributes.required = true;
if (element.attributes.required) {...}
element.attributes.required = false;
กรณีการทดสอบ
สิ่งนี้นำไปสู่การทดสอบการใช้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
แอตทริบิวต์คืออะไร? คุณมีสองทางเลือกทั้งคุณสมบัติที่สะท้อนหรือผ่านการตั้งค่าแอตทริบิวต์อย่างถูกต้อง:
element.setAttribute("required", "");
edName.required = true;
พูดอย่างเคร่งครัดค่าอื่น ๆ จะ "กำหนด" แอตทริบิวต์ แต่ความหมายของBoolean
คุณลักษณะที่กำหนดว่ามันควรจะตั้งค่าเป็นสตริงที่ว่างเปล่า""
เพื่อแสดงให้เห็นความจริง ต่อไปนี้วิธีการทำงานของทุกคนที่จะตั้งrequired
บูลีแอตทริบิวต์
แต่อย่าใช้ :
element.setAttribute("required", "required");
element.setAttribute("required", "foo");
element.setAttribute("required", "true");
element.setAttribute("required", "false");
element.setAttribute("required", false);
element.setAttribute("required", 0);
เราได้เรียนรู้แล้วว่าการพยายามตั้งค่าแอตทริบิวต์โดยตรงนั้นผิด:
edName.attributes["required"] = true;
edName.attributes["required"] = "";
edName.attributes["required"] = "required";
edName.attributes.required = true;
edName.attributes.required = "";
edName.attributes.required = "required";
วิธีการที่ชัดเจนต้อง?
เคล็ดลับเมื่อพยายามที่จะลบrequired
แอตทริบิวต์คือว่ามันเป็นเรื่องง่ายที่จะตั้งใจเปิด:
edName.removeAttribute("required");
edName.required = false;
ด้วยวิธีที่ไม่ถูกต้อง:
edName.setAttribute("required", null);
edName.setAttribute("required", "");
edName.setAttribute("required", "false");
edName.setAttribute("required", false);
edName.setAttribute("required", 0);
เมื่อใช้.required
คุณสมบัติที่สะท้อนคุณยังสามารถใช้ค่า"falsey"ใด ๆเพื่อปิดและค่าที่แท้จริงเพื่อเปิดใช้งาน แต่เพียงยึดติดกับความจริงและเท็จเพื่อความชัดเจน
วิธีการตรวจสอบสำหรับrequired
?
ตรวจสอบการมีอยู่ของแอตทริบิวต์ผ่าน.hasAttribute("required")
วิธีการ:
if (edName.hasAttribute("required"))
{
}
คุณยังสามารถตรวจสอบผ่าน คุณสมบัติที่สะท้อนบูลีน.required
:
if (edName.required)
{
}
required="false"
พวกเขาเคยเขียนเทมเพลตก่อนที่จะเขียนมาตรฐานหรือไม่? แอตทริบิวต์ที่มีเงื่อนไขมักจะเป็นความเจ็บปวดมันง่ายกว่าที่จะใส่บูลีนนั้นในค่าแอตทริบิวต์ ...