Apa nilai yang benar untuk atribut yang dinonaktifkan?

167

Apa nilai yang benar untuk disabledatribut untuk kotak teks atau textarea?

Saya telah melihat yang berikut digunakan sebelumnya:

<input type="text" disabled />
<input type="text" disabled="disabled" />
<input type="text" disabled="true" />
tskuzzy
sumber
5
Atribut harus memiliki nilai, bahkan untuk atribut yang kehadirannya hanya menandakan sesuatu harus dilakukan. disabled="false"akan tetap menonaktifkan elemen, karena PRESENCE disabledyang memicu disablement, bukan nilai atribut.
Marc B
Tautan yang saya poskan sebagai komentar untuk jawaban js1568 mengkonfirmasi / mengklarifikasi apa yang dikatakan @Marc
James Allardice
kemungkinan duplikat stackoverflow.com/questions/1033944/… karena keduanya adalah atribut boolean (tidak ditandai)
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功 法轮功

Jawaban:

148
  • Untuk XHTML, <input type="text" disabled="disabled" />adalah markup yang valid.
  • Untuk HTML5, <input type="text" disabled />valid dan digunakan oleh W3C pada sampel mereka.
  • Faktanya, kedua cara ini bekerja pada semua browser utama.
Erick Petrucelli
sumber
15
Dalam html5, input adalah elemen void dan tidak memerlukan slash penutup sendiri: w3.org/TR/html5/syntax.html#void-elements dan w3.org/TR/html5/syntax.html#syntax-start- tag
Daniel
1
@Daniel K. Tidak perlu, kecuali melakukan polyglot HTML / XML markup
Patanjali
108

Spesifikasi HTML5 :

http://www.w3.org/TR/html5/forms.html#enabling-and-disabling-form-controls:-the-disabled-attribute :

Atribut konten yang diperiksa adalah atribut boolean

http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes :

Kehadiran atribut boolean pada elemen mewakili nilai sebenarnya, dan tidak adanya atribut mewakili nilai palsu.

Jika atribut ada, nilainya harus berupa string kosong atau nilai yang merupakan kecocokan tidak peka huruf ASCII untuk nama kanonik atribut, tanpa spasi spasi awal atau jejak.

Kesimpulan :

Berikut ini adalah valid, ekuivalen, dan benar :

<input type="text" disabled />
<input type="text" disabled="" />
<input type="text" disabled="disabled" />
<input type="text" disabled="DiSaBlEd" />

Berikut ini tidak valid :

<input type="text" disabled="0" />
<input type="text" disabled="1" />
<input type="text" disabled="false" />
<input type="text" disabled="true" />

Tidak adanya atribut adalah satu-satunya sintaks yang valid untuk false :

<input type="text" />

Rekomendasi

Jika Anda peduli untuk menulis XHTML yang valid, gunakan disabled="disabled", karena <input disabled>tidak valid dan alternatif lain kurang dapat dibaca. Selain itu, gunakan saja <input disabled>karena lebih pendek.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
sumber
3
Catatan: Jika Anda menggunakan AngularJS, dan harus mengikat status dinonaktifkan ke variabel, Anda dapat menggunakannya ng-disabled. Mirip dengan atribut lain seperti ini, umumnya mereka memiliki ng-*mitra cerdas
jakub.g
5
disabled={true}bekerja dalam kode JSX reactJs tapi saya yakin itu akan dialihkan ke salah satu format HTML5 yang valid / diizinkan saja.
RBT
1

Saya baru saja mencoba semua ini, dan untuk IE11, satu-satunya hal yang tampaknya berfungsi adalah dinonaktifkan = "benar". Nilai yang dinonaktifkan atau tidak ada nilai yang diberikan tidak berfungsi. Sebagai soal fakta, jsp mendapat kesalahan yang sama diperlukan untuk semua bidang, jadi saya harus menentukan disable = "true" agar ini berfungsi.

Edmond ME
sumber
1
Pertanyaan OP adalah tentang HTML (yaitu kontrol sisi klien). Anda melihat kontrol sisi server; mereka memiliki konvensi yang berbeda. Anda akan melihat perbedaannya jika Anda memeriksa output HTML oleh JSP Anda. Jika Anda masih ragu, coba biola ini di IE11.
Ruud Helderman
Saya telah melihat hal yang sama di sisi klien pada IE 11. IE 11 memaksa sesuatu untuk ada, jadi hanya mengatur hasil yang dinonaktifkan di dinonaktifkan = ""
Robert Achmann
1

Di HTML5, tidak ada nilai yang benar, semua browser utama tidak terlalu peduli apa atributnya, mereka hanya memeriksa apakah atribut itu ada sehingga elemennya dinonaktifkan.

MadsHaupt
sumber