Saya cuba menandakan text
kotak input sebagai diperlukan dalam Javascript.
<input id="edName" type="text" id="name">
Jika medan asalnya ditanda required
:
<form> <input id="edName" type="text" id="name" required><br> <input type="submit" value="Search"> </form>
Apabila pengguna cuba menyerahkan, mereka menerima ralat pengesahan:
Tetapi sekarang saya mahu menetapkan sifat required
pada "runtime" melalui Javascript:
<form> <input id="edName" type="text" id="name"><br> <input type="submit" value="Search"> </form>
Gunakan skrip yang sepadan:
//recommended W3C HTML5 syntax for boolean attributes document.getElementById("edName").attributes["required"] = "";
Tiada semakan pengesahan, tiada sekatan melainkan saya menyerahkan sekarang.
Apakah cara yang betul untuk menyediakan Atribut Boolean pengesahan HTML5 ?
jsFiddle
Pengesahan HTML5 required
属性记录为 Boolean
Atribut didokumenkan sebagai
4.10.7.3.4
Hartarequired
Hartanah
required
ialah harta Boolean. Apabila dinyatakan, elemen ini diperlukan.
Terdapat banyak perkara yang menjengkelkan tentang cara menentukan boolean
sifat. Ulasan spesifikasi HTML5:
Kehadiran atribut Boolean pada elemenmewakili nilai sebenar, dan ketiadaan atribut ini mewakili nilai palsu.
Jika atribut ada, nilainya mestilah rentetan kosong atau nilai tidak peka huruf besar ASCII yang sepadan dengan nama kanonik atribut dan tidak mempunyai ruang di hadapan atau di belakang.
Ini bermakna anda boleh menentukan sifat required
boolean dalam dua cara berbeza:
edName.attributes.required = ""; //the empty string edName.attributes.required = "required"; //the attribute's canonical name
Apabila anda melihat jsFiddle saya untuk soalan ini, anda akan perasan bahawa jika atribut required
ditakrifkan dalam markup:
<input id="edName" type="text" id="name" required>
Maka nilai atribut bukanlah rentetan kosong, dan juga bukan nama kanonik atribut:
edName.attributes.required = [object Attr]
Ini mungkin membawa kepada penyelesaian.
required
是一个反射属性 (例如id
、name
、type
dll.), oleh itu:...di mana
element
是实际的input
elemen DOM, contohnya:(Hanya untuk kesempurnaan.)
Balas:
Itu kerana atribut
required
是一个属性对象,而不是字符串;属性
是NamedNodeMap 其值为Attr代码>对象
。要获取其中之一的值,您需要查看其value
dalam kod itu. Tetapi untuk sifat boolean, nilainya adalah tidak relevan;Jadi jika
required
tidak dicerminkan, anda boleh menetapkannya dengan menambah sifat:...bersamaan dengan
element.required = true
. Anda boleh mengosongkannya dengan memadamkannya sepenuhnya:...bersamaan dengan
element.required = false
.Tetapi kita tidak perlu berbuat demikian untuk
required
kerana ia sudah dicerminkan.Versi pendek
Versi panjang
Setelah T.J. Crowder berjaya menunjukkan sifat tercermin, saya mempelajari sintaks berikut ralat:
Anda mesti lulus
element.getAttribute
和element.setAttribute
:Ini kerana atribut itu sebenarnya mengandungi objek HtmlAttribute khas:
Dengan menetapkan nilai atribut kepada "true" anda tersilap menetapkannya kepada objek String dan bukannya objek HtmlAttribute yang diperlukan:
Secara konsep, idea yang betul (dinyatakan dalam bahasa jenis) ialah:
Ini sebabnya:
getAttribute(名称)
setAttribute(名称, 值)
Kewujudan. Mereka bertanggungjawab untuk memberikan nilai kepada objek HtmlAttribute dalaman.
Selain itu, ia juga mencerminkan beberapa sifat. Ini bermakna anda mempunyai akses yang lebih baik kepada mereka melalui Javascript:
Apa yang anda tidak mahu lakukan ialah menggunakan
.attributes
koleksi secara salah:Kes Ujian
Ini membawa kepada ujian di sekitar penggunaan atribut
required
, membandingkan nilai yang dikembalikan melalui atribut itu dengan atribut yang dicerminkanHasil:
Percubaan untuk mengakses koleksi
.attributes
secara langsung adalah satu ralat. Ia mengembalikan objek yang mewakili sifat DOM:Ini menerangkan sebab anda tidak boleh bercakap terus dengan koleksi
.attributes
. Anda tidak memanipulasi nilai harta itu, tetapi objek yang mewakili harta itu sendiri.Bagaimana untuk menetapkan medan yang diperlukan?
Apakah cara yang betul untuk menetapkan
required
pada hartanah? Anda mempunyai dua pilihan, sama ada sifat tercermin atau dengan menetapkan sifat dengan betul:Tegasnya, sebarang nilai lain "menetapkan" harta itu. Walau bagaimanapun, takrifan atribut
Boolean
menyatakan bahawa ia hanya boleh ditetapkan kepada rentetan kosong""
untuk menunjukkanBoolean
属性的定义规定,只能将其设置为空字符串""
来指示 true。以下方法都可以设置required
true. Kaedah berikut boleh menetapkanBoolean atribut,
Tetapi
jangan gunakanmereka:
Kami telah mengetahui bahawa cuba menetapkan sifat secara langsung adalah satu kesilapan:Bagaimana untuk kosongkan medan yang diperlukan?
Tipunya apabila mencubarequired
mengalih
harta adalah mudah untuk membukanya secara tidak sengaja:
Kaedah tidak sah:.required
必需
semak
?.hasAttribute("required")
jika adaSemak sama ada harta itu wujud melalui kaedah :
Anda juga boleh menyemak melalui 🎜Boolean🎜 tercermin 🎜 sifat: 🎜.required