Saya ingin menulis plugin jQuery sederhana yang menampilkan modals inline di bawah elemen tertentu. Ide saya adalah agar skrip masuk otomatis berdasarkan atribut data yang ditentukan pada elemen.
Contoh yang sangat mendasar:
<p data-modal-target>Hover over me for an inline modal!</p>
<div data-modal-content data-modal-align="right" data-modal-trigger="hover" data-modal-offset="10px"><!-- any desired syntax can go here --></div>
Saya hanya ingin tahu apakah data-modal-target
contoh di atas valid, atau haruskah data-modal-target="true"
? Saya tidak peduli tentang sesuatu yang lebih buruk dari IE9 dll, satu-satunya persyaratan saya adalah HTML5 valid.
Jawaban:
Valid, tapi bukan boolean.
Spesifikasi atribut data khusus tidak menyebutkan perubahan apa pun pada penanganan atribut kosong, sehingga aturan umum tentang atribut kosong berlaku di sini:
Jadi, Anda diperbolehkan menggunakan atribut data khusus yang kosong, tetapi diperlukan penanganan khusus untuk menggunakannya sebagai boolean.
Saat Anda mengakses atribut kosong, nilainya adalah
""
. Karena ini adalah nilai yang salah, Anda tidak bisa hanya menggunakanif (element.dataset.myattr)
untuk memeriksa apakah ada atribut.Anda harus menggunakan
element.hasAttribute('myattr')
atauif (element.dataset.myattr !== undefined)
sebagai gantinya.Jawaban Lloyd salah. Dia menyebutkan tautan ke atribut boolean microsyntax, tetapi
data-*
atribut tidak ditentukan sebagai boolean dalam spesifikasi.sumber
scriptAttrs
pengaturan jQuery tidak menyukaidefer
nilai biasa , tetapi adefer: ""
harus melakukan triknya. Terima kasih!Ya, sangat valid. Dalam kasus Anda,
data-modal-target
akan mewakili atribut boolean:sumber
if ($('p').data('modal-target'))
tidak akan berhasil: stackoverflow.com/questions/16864999/… .element.dataset.modalTarget
akan menghasilkan string kosong yang salah (Chrome 32) hasil yang sama dengan jQueryYa, ini adalah sintaks yang valid untuk menghilangkan nilai atribut data khusus.
"Atribut dapat ditentukan dalam empat cara berbeda:
Kosongkan sintaks atribut Hanya nama atribut. Nilainya secara implisit adalah string kosong. [...] " https://developers.whatwg.org/syntax.html#attributes-0
sumber
Di satu sisi, ini melewati validator 16.5.7 https://validator.w3.org/nu/#textarea :
Di sisi lain, HTML5 tidak menyebutkan dalam spesifikasi
data-
atribut bahwa mereka adalah boolean: https://www.w3.org/TR/html5/dom.html#custom-data-attribute sementara ia mengatakannya dengan sangat jelas untuk boolean lainnya atribut sepertichecked
https://www.w3.org/TR/html5/forms.html#attr-input-checkedsumber