I'd like to write a simple jQuery plugin that displays inline modals under specified elements. My idea is for the script to auto-init based on data attributes specified on elements.
A very basic example:
<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>
I'm just wondering if data-modal-target
in the above example is valid, or does it have to be data-modal-target="true"
? I don't care about anything crappier than IE9 etc, my only requirement is that it be valid HTML5.
Yes, perfectly valid. In your case,
data-modal-target
would represent a boolean attribute:Custom data attributes specification doesn't mention any changes to empty attributes handling, so general rules about empty attributes apply here:
So you are allowed to use empty custom data attributes, but special handling needed to use them as boolean.
If you are accessing attribute through
element.dataset
:""
.undefined
.Therefore, you can't just check as
if (element.dataset.myattr)
because it will always befalse
.You can and should check boolean attributes as
if (element.dataset.myattr !== undefined)
.Lloyd's answer is incorrect. He mentions link to boolean attributes microsyntax, but
data-*
attributes are not specified as boolean in spec.Yes, it is valid syntax to omit value for a custom data attribute.
"Attributes can be specified in four different ways:
Empty attribute syntax Just the attribute name. The value is implicitly the empty string. [...]" https://developers.whatwg.org/syntax.html#attributes-0
On one hand, it passes the validator 16.5.7 https://validator.w3.org/nu/#textarea :
On the other, HTML5 does not say in the specification of
data-
attributes that they are boolean: https://www.w3.org/TR/html5/dom.html#custom-data-attribute while it says that very clearly for other boolean attributes likechecked
https://www.w3.org/TR/html5/forms.html#attr-input-checked