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.getAttribute
dan 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 .attributes
koleksi:
element.attributes.required = true;
if (element.attributes.required) {...}
element.attributes.required = false;
Menguji Kasus
Hal ini menyebabkan pengujian seputar penggunaan required
atribut, 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)
.attributes
Salah 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 .attributes
langsung dengan kolektor. Anda tidak memanipulasi nilai atribut, tetapi objek yang merepresentasikan atribut itu sendiri.
Bagaimana cara mengatur wajib?
Apa cara yang benar untuk menyetel required
atribut? 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 Boolean
atribut 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 required
atribut 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 .required
properti 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 ...