Version corta
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) { }
Versión larga
Una vez que TJ Crowder logró señalar las propiedades reflejadas , aprendí que la siguiente sintaxis es incorrecta :
element.attributes["name"] = value;
element.attributes.name = value;
value = element.attributes.name;
value = element.attributes["name"];
Usted debe ir a través de element.getAttribute
y element.setAttribute
:
element.getAttribute("foo");
element.setAttribute("foo", "test");
Esto se debe a que el atributo en realidad contiene un objeto HtmlAttribute especial :
element.attributes["foo"];
element.attributes.foo;
Al establecer un valor de atributo en "verdadero", lo está estableciendo por error en un objeto String , en lugar del objeto HtmlAttribute que requiere:
element.attributes["foo"] = "true";
element.setAttribute("foo", "true");
Conceptualmente, la idea correcta (expresada en un lenguaje mecanografiado) es:
HtmlAttribute attribute = new HtmlAttribute();
attribute.value = "";
element.attributes["required"] = attribute;
Esta es la razón por:
getAttribute(name)
setAttribute(name, value)
existe. Ellos hacen el trabajo de asignar el valor al objeto HtmlAttribute dentro.
Además de esto, se reflejan algunos atributos . Esto significa que puede acceder a ellos más fácilmente desde Javascript:
element.required = true;
if (element.required) {...}
element.required = false;
Lo que no quieres hacer es usar la .attributes
colección por error :
element.attributes.required = true;
if (element.attributes.required) {...}
element.attributes.required = false;
Casos de prueba
Esto llevó a realizar pruebas en torno al uso de un required
atributo, comparando los valores devueltos a través del atributo y la propiedad reflejada.
document.getElementById("name").required;
document.getElementById("name").getAttribute("required");
con resultados:
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)
Intentar acceder a la .attributes
colección directamente es incorrecto. Devuelve el objeto que representa el atributo DOM:
edName.attributes["required"] => [object Attr]
edName.attributes.required => [object Attr]
Esto explica por qué nunca debe hablar .attributes
directamente con el cobrador. No está manipulando los valores de los atributos, sino los objetos que representan los atributos en sí.
¿Cómo configurar requerido?
¿Cuál es la forma correcta de establecer required
un atributo? Tiene dos opciones, ya sea la propiedad reflejada o estableciendo correctamente el atributo:
element.setAttribute("required", "");
edName.required = true;
Estrictamente hablando, cualquier otro valor "establecerá" el atributo. Pero la definición de Boolean
atributos dicta que solo debe establecerse en la cadena vacía ""
para indicar verdadero . Los siguientes métodos funcionan todos para establecer el atributo required
booleano ,
pero no los uses :
element.setAttribute("required", "required");
element.setAttribute("required", "foo");
element.setAttribute("required", "true");
element.setAttribute("required", "false");
element.setAttribute("required", false);
element.setAttribute("required", 0);
Ya aprendimos que intentar establecer el atributo directamente es incorrecto:
edName.attributes["required"] = true;
edName.attributes["required"] = "";
edName.attributes["required"] = "required";
edName.attributes.required = true;
edName.attributes.required = "";
edName.attributes.required = "required";
¿Cómo borrar los requisitos?
El truco al intentar eliminar el required
atributo es que es fácil activarlo accidentalmente:
edName.removeAttribute("required");
edName.required = false;
Con las formas inválidas:
edName.setAttribute("required", null);
edName.setAttribute("required", "");
edName.setAttribute("required", "false");
edName.setAttribute("required", false);
edName.setAttribute("required", 0);
Al usar la .required
propiedad reflejada , también puede usar cualquier valor "falsey" para desactivarla y valores de verdad para activarla. Pero limítese a verdadero y falso para mayor claridad.
Cómo comprobar para required
?
Verifique la presencia del atributo a través del .hasAttribute("required")
método:
if (edName.hasAttribute("required"))
{
}
También puede verificarlo a través de la propiedad reflejada booleana.required
:
if (edName.required)
{
}
required="false"
, ¿alguna vez escribieron una plantilla antes de escribir el estándar? Los atributos condicionales suelen ser una molestia, es mucho más fácil poner ese booleano en el valor del atributo ...