Krótka wersja
element.setAttribute("required", "");
element.required = true;
jQuery(element).attr('required', '');
$("#elementId").attr('required', '');
element.removeAttribute("required");
element.required = false;
jQuery(element).removeAttr('required');
$("#elementId").removeAttr('required');
if (edName.hasAttribute("required")) { }
if (edName.required) { }
Długa wersja
Gdy TJ Crowderowi udało się wskazać odzwierciedlone właściwości , dowiedziałem się, że następująca składnia jest nieprawidłowa :
element.attributes["name"] = value;
element.attributes.name = value;
value = element.attributes.name;
value = element.attributes["name"];
Państwo musi przejść przez element.getAttribute
i element.setAttribute
:
element.getAttribute("foo");
element.setAttribute("foo", "test");
Dzieje się tak, ponieważ atrybut w rzeczywistości zawiera specjalny obiekt HtmlAttribute :
element.attributes["foo"];
element.attributes.foo;
Ustawiając wartość atrybutu na „true”, przez pomyłkę ustawiasz go na obiekt String , a nie obiekt HtmlAttribute, którego wymaga:
element.attributes["foo"] = "true";
element.setAttribute("foo", "true");
Koncepcyjnie poprawna idea (wyrażona w języku maszynistym) to:
HtmlAttribute attribute = new HtmlAttribute();
attribute.value = "";
element.attributes["required"] = attribute;
Dlatego:
getAttribute(name)
setAttribute(name, value)
istnieć. Wykonują pracę nad przypisaniem wartości do obiektu HtmlAttribute wewnątrz.
Oprócz tego odzwierciedlane są pewne atrybuty . Oznacza to, że możesz uzyskać do nich ładniejszy dostęp z poziomu JavaScript:
element.required = true;
if (element.required) {...}
element.required = false;
To, czego nie chcesz, to omyłkowe użycie .attributes
kolekcji:
element.attributes.required = true;
if (element.attributes.required) {...}
element.attributes.required = false;
Przypadki testowe
Doprowadziło to do przetestowania użycia required
atrybutu, porównania wartości zwróconych przez atrybut i odzwierciedlonej właściwości
document.getElementById("name").required;
document.getElementById("name").getAttribute("required");
z wynikami:
HTML .required .getAttribute("required")
========================== =============== =========================
<input> false (Boolean) null (Object)
<input required> true (Boolean) "" (String)
<input required=""> true (Boolean) "" (String)
<input required="required"> true (Boolean) "required" (String)
<input required="true"> true (Boolean) "true" (String)
<input required="false"> true (Boolean) "false" (String)
<input required="0"> true (Boolean) "0" (String)
Próba .attributes
bezpośredniego dostępu do kolekcji jest błędna. Zwraca obiekt, który reprezentuje atrybut DOM:
edName.attributes["required"] => [object Attr]
edName.attributes.required => [object Attr]
To wyjaśnia, dlaczego nigdy nie powinieneś rozmawiać .attributes
bezpośrednio z kolektą. Nie manipulujesz wartościami atrybutów, ale obiektami, które reprezentują same atrybuty.
Jak ustawić wymagane?
Jaki jest prawidłowy sposób ustawienia required
atrybutu? Masz dwie możliwości: właściwość odzwierciedloną lub poprzez prawidłowe ustawienie atrybutu:
element.setAttribute("required", "");
edName.required = true;
Ściśle mówiąc, każda inna wartość „ustawi” atrybut. Ale definicja Boolean
atrybutów mówi, że powinien być ustawiony tylko na pusty łańcuch, ""
aby wskazywać na prawdę . Wszystkie poniższe metody działają, aby ustawić wartość required
logiczną atrybut,
ale nie używaj ich:
element.setAttribute("required", "required");
element.setAttribute("required", "foo");
element.setAttribute("required", "true");
element.setAttribute("required", "false");
element.setAttribute("required", false);
element.setAttribute("required", 0);
Dowiedzieliśmy się już, że próba bezpośredniego ustawienia atrybutu jest błędna:
edName.attributes["required"] = true;
edName.attributes["required"] = "";
edName.attributes["required"] = "required";
edName.attributes.required = true;
edName.attributes.required = "";
edName.attributes.required = "required";
Jak wyczyścić wymagane?
Sztuką gdy próbuje usunąć ten required
atrybut jest to, że łatwo przypadkowo włączyć go:
edName.removeAttribute("required");
edName.required = false;
Z nieprawidłowymi sposobami:
edName.setAttribute("required", null);
edName.setAttribute("required", "");
edName.setAttribute("required", "false");
edName.setAttribute("required", false);
edName.setAttribute("required", 0);
Korzystając z .required
właściwości odbitej , możesz również użyć dowolnego „falsey” wartości , aby ją wyłączyć, oraz prawdziwych wartości, aby ją włączyć. Ale po prostu trzymaj się prawdy i fałszu dla jasności.
Jak sprawdzić dla required
?
Sprawdź obecność atrybutu za pomocą .hasAttribute("required")
metody:
if (edName.hasAttribute("required"))
{
}
Możesz to również sprawdzić za pomocą właściwości odzwierciedlonej w wartości logicznej.required
:
if (edName.required)
{
}
required="false"
, czy kiedykolwiek napisali szablon przed napisaniem standardu? Atrybuty warunkowe są zwykle uciążliwe, o wiele łatwiej jest po prostu umieścić tę wartość logiczną w wartości atrybutu ...