2009-04-01 13 views
16

Ci sono alcuni attributi in HTML che sono "booleani" - i browser li considerano "veri" se sono presenti, indipendentemente dal valore. Un esempio di tale attributo è selezionato nel tag <option>. Un altro è controllato su <input type="checkbox">.Attributi HTML booleani

Se si dispone di una chiamata a setAttribute() per un tale attributo, non sembra esserci alcun valore che si possa impostare affinché i browser si comportino in modo coerente come se l'attributo fosse mancante.

Per esempio

option.setAttribute("selected", false) 

sarà ancora segnano l'opzione selezionata. null, stringa vuota o undefined non funziona neanche. Se qualcuno sa di un valore che posso impostare per raggiungere il mio obiettivo, faccelo sapere, ma non credo che esista. (A causa di un po 'di codice del framework che uso, non chiamando setAttribute(), o chiamando removeAttribute() è difficile.)

Sto cercando di trovare un elenco esaustivo di tali attributi a caso speciale di loro. Ecco quello che ho finora:

  • selezionato di <option>
  • controllato di <input>
  • disabilitato, sola lettura di <input>, <select>, <option>, <optgroup>, <button>, <textarea>
  • multipla di <select>

Si prega di aiutarmi a completare questa lista - o indicarlo a uno esistente.

risposta

24

(A causa di un po 'di codice del framework che uso, non chiamare setAttribute(), o chiamare removeAttribute() è difficile.)

Quindi vorrei presentare che il codice quadro ha bisogno di essere risolto o di dumping.

Non è possibile impostare Attributo per rimuovere un attributo, in base alla progettazione. Qualsiasi soluzione trovata con valori fuori banda come "null", se dovesse funzionare in un particolare browser, sarebbe del tutto invalida secondo lo standard DOM Core.

setAttribute() è in ogni caso meglio evitato nei contesti HTML (non XML) del browser. IE pre-8 non conosce la differenza tra un attributo DOM e una proprietà JavaScript, che può facilmente portare a molti problemi davvero strani. Se stai cercando di impostare 'checked' come attributo (che teoricamente dovresti fare impostandolo sulla stringa "checked"), non aspettarti che IE collabori.

L'elenco completo degli attributi booleani in HTML 4.01 (e quindi XHTML 1.0) è (con nomi di proprietà dove si differenziano in 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

Vorrei anche aggiungere un attributo ['itemscope'] (http://www.w3.org/TR/html5/microdata.html) a questo elenco – Nazariy

+0

Sì, ci sono potenzialmente un pacchetto in più quando si introducono estensioni HTML5 oggi . – bobince

+1

Ecco un elenco di attributi booleani in HTML5: https://github.com/kangax/html-minifier/issues/63 Si noti che include alcuni attributi non booleani che hanno un comportamento simile (vale a dire il valore di stringa vuota associa a un diverso valore predefinito), come 'contenteditable' e' spellcheck'. –

2

su celle di tabella, ad es. TD, TH

nowrap 

per la cronaca, per modificare gli attributi come controllato (su elementi casella di controllo/Radio) si può fare.

myCheckBoxElem.checked = true|false; 

o

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

questo cambia la proprietà, non è l'attributo. Come ho detto - sono un po 'bloccato in setAttribute dal codice di altre persone – levik

+0

ah, ho perso quel po'. no prob, basta usare la chiamata removeAttribute() che altri hanno notato. – scunliffe

1

Non puoi semplicemente usare removeAttribute()?

+0

No. Fondamentalmente restituisco un valore e questo valore viene passato a una chiamata setAttribute() che non controllo. – levik

3

Prova removeAttribute:

option.removeAttribute("selected"); 

EDIT: Dopo aver letto il tuo commento, leggere this su setAttribute. In particolare:

Anche se getAttribute() restituisce null per gli attributi mancanti, è necessario utilizzare removeAttribute() al posto di elt.setAttribute (attr, null) per rimuovere l'attributo.

+0

So di removeAttribute(). Sfortunatamente il codice quadro su cui mi baso rende difficile chiamarlo. – levik

1

Non è esattamente quello che stai chiedendo, ma sia la 'classe' e 'per' gli attributi ricevere nomi diversi DOM

element.className 
element.htmlFor