2009-04-01 23 views
16

hay algunos atributos en HTML que son "booleano" - navegadores los tratan como "verdadero" si están presentes, independientemente del valor. Un ejemplo de dicho atributo es seleccionado en la etiqueta <option>. Otro es marcado en <input type="checkbox">.booleana atributos HTML

Si tiene una llamada al setAttribute() para dicho atributo, parece que no hay ningún valor que pueda configurar para que los navegadores se comporten constantemente como si el atributo no se encontrara.

Por ejemplo

option.setAttribute("selected", false) 

todavía marcará la opción seleccionada. nula, cadena vacía o indefinido no funcionan bien. Si alguien sabe de un valor que puedo establecer para lograr mi objetivo, hágamelo saber, pero no creo que exista. (Debido a un cierto código marco que utilizo, no llamando setAttribute(), o llamando removeAttribute() es difícil.)

Estoy tratando de encontrar una lista exhaustiva de las características descritas se caso especial de ellos. Esto es lo que tengo hasta ahora:

  • seleccionado de <option>
  • comprobado de <input>
  • discapacitados, sólo lectura de <input>, <select>, <option>, <optgroup>, <button>, <textarea>
  • múltiples de <select>

Por favor, ayuda a completar esta lista - o que me señale una ya existente.

Respuesta

24

(Por cierto código marco que utilizo, no llamar setAttribute(), o llamar a removeAttribute() es difícil.)

Luego, yo diría que el código de la estructura necesita ser corregido, o volcado.

No se puede establecer la Atribución para desarmar un atributo, por diseño. Cualquier solución que encuentre que implique valores fuera de banda como 'nulo', si funcionara en un navegador en particular, sería completamente inválida según el estándar DOM Core.

setAttribute() se evita en cualquier caso en contextos HTML de navegador (no XML). IE pre-8 no conoce la diferencia entre un atributo DOM y una propiedad de JavaScript, que fácilmente puede dar lugar a muchos problemas realmente extraños. Si está tratando de establecer 'checked' como un atributo (que teóricamente debe hacer configurándolo en la cadena "checked"), no espere que IE colabore.

La lista completa de los atributos booleanos en HTML 4.01 (y por tanto XHTML 1.0) es (con nombres de propiedad en la que difieren en caso):

checked    (input type=checkbox/radio) 
selected   (option) 
disabled   (input, textarea, button, select, option, optgroup) 
readonly   (input type=text/password, textarea) 
multiple   (select) 
ismap  isMap  (img, input type=image) 

defer    (script) 
declare    (object; never used) 
noresize noResize (frame) 
nowrap noWrap (td, th; deprecated) 
noshade noShade (hr; deprecated) 
compact    (ul, ol, dl, menu, dir; deprecated) 
+0

También agregaría un atributo ['itemscope'] (http://www.w3.org/TR/html5/microdata.html) a esta lista – Nazariy

+0

Sí, potencialmente hay un paquete más cuando traes extensiones HTML5 hoy . – bobince

+1

Aquí hay una lista de atributos booleanos en HTML5: https://github.com/kangax/html-minifier/issues/63 Tenga en cuenta que incluye algunos atributos no booleanos que tienen un comportamiento similar (es decir, el valor de cadena vacía se asigna a un diferente valor predeterminado), como 'contenteditable' y' spellcheck'. –

2

en celdas de tabla, p. TD, TH

nowrap 

para el registro, para cambiar atributos como verificado (en elementos casilla/de radio) que puede hacer.

myCheckBoxElem.checked = true|false; 

o

myCheckBoxElem.checked = !myCheckBoxElem.checked;//toggles to the opposite state 
+0

Esto cambia la propiedad, no el atributo. Como dije, estoy un poco bloqueado en setAttribute por código de otras personas – levik

+0

ah, perdí ese bit. no hay problema, simplemente use la llamada a removeAttribute() que otros hayan anotado. – scunliffe

1

no puedes usar removeAttribute()?

+0

No. Básicamente devuelvo un valor y este valor pasa a una llamada a setAttribute() que no controlo. – levik

3

Trate removeAttribute:

option.removeAttribute("selected"); 

EDIT: Después de leer su comentario, lea this sobre setAttribute. En particular:

Aunque getAttribute() devuelve un valor nulo para los atributos que faltan, se debe utilizar removeAttribute() en lugar de elt.setAttribute (attr, null) para quitar el atributo.

+0

Sé acerca de removeAttribute(). Lamentablemente, el código de marco en el que me baso hace que sea difícil llamarlo. – levik

1

No es exactamente lo que estás preguntando, pero tanto la 'clase' y 'para' atributos recibir diferentes nombres DOM

element.className 
element.htmlFor