Eu gostaria de escrever um plugin jQuery simples que exibe modais embutidos em elementos especificados. Minha ideia é que o script inicie automaticamente com base nos atributos de dados especificados nos elementos.
Um exemplo muito 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>
Só estou me perguntando se data-modal-target
o exemplo acima é válido ou tem que ser data-modal-target="true"
? Eu não me importo com nada pior do que o IE9 etc, meu único requisito é que seja HTML5 válido.
Respostas:
Válidos, mas não são booleanos.
A especificação de atributos de dados personalizados não menciona nenhuma alteração no tratamento de atributos vazios, portanto, as regras gerais sobre atributos vazios se aplicam aqui:
Portanto, você tem permissão para usar atributos de dados personalizados vazios, mas é necessário um tratamento especial para usá-los como booleanos.
Quando você está acessando um atributo vazio, seu valor é
""
. Como é um valor falso, você não pode usar apenasif (element.dataset.myattr)
para verificar se um atributo está presente.Você deve usar
element.hasAttribute('myattr')
ou emif (element.dataset.myattr !== undefined)
vez disso.A resposta de Lloyd está errada. Ele menciona link para a microssintaxe de atributos booleanos, mas os
data-*
atributos não são especificados como booleanos na especificação.fonte
scriptAttrs
configuração do jQuery não gosta de umdefer
valor simples , mas umdefer: ""
deve servir. Obrigado!Sim, perfeitamente válido. No seu caso,
data-modal-target
representaria um atributo booleano:fonte
if ($('p').data('modal-target'))
não funcionará: stackoverflow.com/questions/16864999/… .element.dataset.modalTarget
produziria uma string vazia que é falsa (Chrome 32) mesmo resultado com jQuerySim, é uma sintaxe válida omitir o valor de um atributo de dados personalizado.
"Os atributos podem ser especificados de quatro maneiras diferentes:
Sintaxe de atributo vazia Apenas o nome do atributo. O valor é implicitamente a string vazia. [...] " https://developers.whatwg.org/syntax.html#attributes-0
fonte
Por um lado, ele passa no validador 16.5.7 https://validator.w3.org/nu/#textarea :
Por outro lado, o HTML5 não diz na especificação de
data-
atributos que eles são booleanos: https://www.w3.org/TR/html5/dom.html#custom-data-attribute enquanto diz isso muito claramente para outros booleanos atributos comochecked
https://www.w3.org/TR/html5/forms.html#attr-input-checkedfonte