Versi pendek
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) { }
Versi Panjang
Setelah TJ Crowder berhasil menunjukkan properti yang direfleksikan , saya mengetahui bahwa sintaks berikut salah :
element.attributes["name"] = value;
element.attributes.name = value;
value = element.attributes.name;
value = element.attributes["name"];
Anda harus melalui element.getAttributedan element.setAttribute:
element.getAttribute("foo");
element.setAttribute("foo", "test");
Ini karena atribut sebenarnya berisi objek HtmlAttribute khusus :
element.attributes["foo"];
element.attributes.foo;
Dengan menyetel nilai atribut ke "true", Anda salah menyetelnya ke objek String , bukan objek HtmlAttribute yang diperlukan:
element.attributes["foo"] = "true";
element.setAttribute("foo", "true");
Secara konseptual ide yang benar (diekspresikan dalam bahasa yang diketik), adalah:
HtmlAttribute attribute = new HtmlAttribute();
attribute.value = "";
element.attributes["required"] = attribute;
Ini sebabnya:
getAttribute(name)
setAttribute(name, value)
ada. Mereka melakukan pekerjaan untuk menetapkan nilai ke objek HtmlAttribute di dalamnya.
Selain itu, beberapa atribut juga tercermin . Ini berarti Anda dapat mengaksesnya dengan lebih baik dari Javascript:
element.required = true;
if (element.required) {...}
element.required = false;
Yang tidak ingin Anda lakukan adalah salah menggunakan .attributeskoleksi:
element.attributes.required = true;
if (element.attributes.required) {...}
element.attributes.required = false;
Menguji Kasus
Hal ini menyebabkan pengujian seputar penggunaan requiredatribut, membandingkan nilai yang dikembalikan melalui atribut, dan properti yang direfleksikan
document.getElementById("name").required;
document.getElementById("name").getAttribute("required");
dengan hasil:
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)
.attributesSalah mencoba mengakses koleksi secara langsung. Ini mengembalikan objek yang mewakili atribut DOM:
edName.attributes["required"] => [object Attr]
edName.attributes.required => [object Attr]
Ini menjelaskan mengapa Anda tidak boleh berbicara .attributeslangsung dengan kolektor. Anda tidak memanipulasi nilai atribut, tetapi objek yang merepresentasikan atribut itu sendiri.
Bagaimana cara mengatur wajib?
Apa cara yang benar untuk menyetel requiredatribut? Anda memiliki dua pilihan, baik properti yang tercermin , atau melalui pengaturan atribut yang benar:
element.setAttribute("required", "");
edName.required = true;
Sebenarnya, nilai lain apa pun akan "menyetel" atribut tersebut. Tetapi definisi Booleanatribut menentukan bahwa itu hanya boleh disetel ke string kosong ""untuk menunjukkan benar . Berikut metode semua bekerja untuk mengatur para required Boolean atribut,
tapi jangan gunakan mereka:
element.setAttribute("required", "required");
element.setAttribute("required", "foo");
element.setAttribute("required", "true");
element.setAttribute("required", "false");
element.setAttribute("required", false);
element.setAttribute("required", 0);
Kami telah mempelajari bahwa mencoba menyetel atribut secara langsung adalah salah:
edName.attributes["required"] = true;
edName.attributes["required"] = "";
edName.attributes["required"] = "required";
edName.attributes.required = true;
edName.attributes.required = "";
edName.attributes.required = "required";
Bagaimana cara membersihkan dibutuhkan?
Trik ketika mencoba untuk menghapus yang requiredatribut adalah bahwa hal itu mudah untuk sengaja menyalakannya:
edName.removeAttribute("required");
edName.required = false;
Dengan cara yang tidak valid:
edName.setAttribute("required", null);
edName.setAttribute("required", "");
edName.setAttribute("required", "false");
edName.setAttribute("required", false);
edName.setAttribute("required", 0);
Saat menggunakan .requiredproperti yang tercermin , Anda juga dapat menggunakan "falsey" apa pun nilai untuk menonaktifkannya, dan nilai kebenaran untuk mengaktifkannya. Tapi tetap berpegang pada benar dan salah untuk kejelasan.
Cara memeriksa untuk required?
Periksa keberadaan atribut melalui .hasAttribute("required")metode:
if (edName.hasAttribute("required"))
{
}
Anda juga dapat memeriksanya melalui properti tercermin Boolean.required :
if (edName.required)
{
}
required="false", apakah mereka pernah menulis template sebelum menulis standar? Atribut bersyarat biasanya menyebalkan, jauh lebih mudah untuk meletakkan boolean itu dalam nilai atribut ...