Chciałbym napisać prostą wtyczkę jQuery, która wyświetla wbudowane modale pod określonymi elementami. Mój pomysł jest taki, aby skrypt automatycznie inicjował się na podstawie atrybutów danych określonych w elementach.
Bardzo podstawowy przykład:
<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>
Zastanawiam się tylko, czy data-modal-target
w powyższym przykładzie jest poprawny, czy musi być data-modal-target="true"
? Nie obchodzi mnie nic bardziej gównianego niż IE9 itp. Moim jedynym wymaganiem jest, aby był to poprawny HTML5.
Odpowiedzi:
Prawidłowe, ale nie są logiczne.
Specyfikacja niestandardowych atrybutów danych nie wspomina o żadnych zmianach w obsłudze pustych atrybutów, więc mają tu zastosowanie ogólne zasady dotyczące pustych atrybutów :
Możesz więc używać pustych niestandardowych atrybutów danych, ale wymagana jest specjalna obsługa, aby używać ich jako wartości logicznych.
Kiedy uzyskujesz dostęp do pustego atrybutu, jego wartością jest
""
. Ponieważ jest to fałszywa wartość, nie możesz po prostu użyćif (element.dataset.myattr)
do sprawdzenia, czy atrybut jest obecny.Zamiast tego powinieneś użyć
element.hasAttribute('myattr')
lubif (element.dataset.myattr !== undefined)
.Odpowiedź Lloyda jest błędna. Wspomina o linku do atrybutów boolowskich microsyntax, ale
data-*
atrybuty nie są określone jako boolowskie w specyfikacji.źródło
scriptAttrs
ustawienie jQuery nie lubi zwykłejdefer
wartości, aledefer: ""
powinno załatwić sprawę. Dzięki!Tak, całkowicie ważne. W twoim przypadku
data-modal-target
reprezentowałby atrybut boolowski:źródło
if ($('p').data('modal-target'))
nie zadziała: stackoverflow.com/questions/16864999/… .element.dataset.modalTarget
dałoby pusty ciąg, który jest fałszywy (Chrome 32) ten sam wynik z jQueryTak, prawidłową składnią jest pomijanie wartości dla niestandardowego atrybutu danych.
„Atrybuty można określić na cztery różne sposoby:
Pusta składnia atrybutu Tylko nazwa atrybutu. Wartość jest niejawnie pustym ciągiem. [...] ” https://developers.whatwg.org/syntax.html#attributes-0
źródło
Z jednej strony przechodzi przez walidator 16.5.7 https://validator.w3.org/nu/#textarea :
Z drugiej strony HTML5 nie mówi w specyfikacji
data-
atrybutów, że są one logiczne: https://www.w3.org/TR/html5/dom.html#custom-data-attribute, podczas gdy mówi to bardzo wyraźnie w przypadku innych wartości logicznych atrybuty, takie jakchecked
https://www.w3.org/TR/html5/forms.html#attr-input-checkedźródło