Me gustaría escribir un complemento jQuery simple que muestre modales en línea bajo elementos especificados. Mi idea es que el script se inicie automáticamente según los atributos de datos especificados en los elementos.
Un ejemplo muy básico:
<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>
Me pregunto si data-modal-target
el ejemplo anterior es válido o tiene que serlo data-modal-target="true"
. No me importa nada más malo que IE9, etc., mi único requisito es que sea HTML5 válido.
Respuestas:
Válidos, pero no son booleanos.
La especificación de atributos de datos personalizados no menciona ningún cambio en el manejo de atributos vacíos, por lo que las reglas generales sobre atributos vacíos se aplican aquí:
Por lo tanto, puede usar atributos de datos personalizados vacíos, pero se necesita un manejo especial para usarlos como booleanos.
Cuando accede a un atributo vacío, su valor es
""
. Dado que es un valor falso, no puede usarloif (element.dataset.myattr)
para verificar si un atributo está presente.Deberías usar
element.hasAttribute('myattr')
o en suif (element.dataset.myattr !== undefined)
lugar.La respuesta de Lloyd es incorrecta. Él menciona el enlace a la microsintaxis de atributos booleanos, pero los
data-*
atributos no se especifican como booleanos en la especificación.fuente
scriptAttrs
configuración de jQuery no le gusta undefer
valor simple , perodefer: ""
debería funcionar. ¡Gracias!Sí, perfectamente válido. En su caso,
data-modal-target
representaría un atributo booleano:fuente
if ($('p').data('modal-target'))
no funcionarán: stackoverflow.com/questions/16864999/… .element.dataset.modalTarget
produciría una cadena vacía que es falsa (Chrome 32) mismo resultado con jQuerySí, es una sintaxis válida omitir el valor de un atributo de datos personalizado.
"Los atributos se pueden especificar de cuatro formas diferentes:
Sintaxis de atributo vacía Solo el nombre del atributo. El valor es implícitamente la cadena vacía. [...] " https://developers.whatwg.org/syntax.html#attributes-0
fuente
Por un lado, pasa el validador 16.5.7 https://validator.w3.org/nu/#textarea :
Por otro lado, HTML5 no dice en la especificación de
data-
atributos que son booleanos: https://www.w3.org/TR/html5/dom.html#custom-data-attribute mientras que lo dice muy claramente para otros booleanos atributos comochecked
https://www.w3.org/TR/html5/forms.html#attr-input-checkedfuente