2009-12-04 12 views
9

Ecco la mia HTML:Se l'impostazione `checkbox.checked = false` non cancella anche l'attributo HTML?

<input id="test" type="checkbox" checked=""> 

Ecco un estratto Firebug:

>>> test 
<input id="test" type="checkbox" checked=""> 

>>> test.checked = false 
false 

>>> test 
<input id="test" type="checkbox" checked=""> 

Um ... Mi manca qualcosa, o che dovrebbero ultima riga non leggere il seguente?

<input id="test" type="checkbox"> 

UI-saggio, la casella di controllo effettivamente deselezionare quando eseguo la linea checked = false.

In ogni caso, se c'è qualche spiegazione legittima per questo, allora qual è il modo corretto per deselezionare una casella di controllo da JavaScript, se non checked = false?

+2

Probabilmente non ci si deve preoccupare di ciò che dice Firebug finché i dati arrivano sul server e l'interfaccia utente si comporta come previsto. –

+0

Questo è solo per dimostrare di cosa sto parlando. Il vero problema è che ho CSS che voglio avere un effetto in base al fatto che la casella sia spuntata o meno, e fa il suo lavoro solo quando clicco sulla casella di controllo, non quando ho impostato ".checked". – Kev

risposta

23

L'attributo value di input type="text" ei checked o selected attributi di input type="checkbox", radio e option corrispondono al valore iniziale del campo di modulo, non il valore corrente dell'utente o script è impostato. Di conseguenza, la modifica della proprietà checked non modifica il valore dell'attributo e l'impostazione dell'attributo checked non altera il reale valore visibile che verrà inviato con il modulo.

L'attributo checked="checked" corrisponde al defaultCheckedDOM property, non la proprietà checked. Allo stesso modo, l'attributo value="..." corrisponde a defaultValue.

(Nota: ci sono IE trucchi qui a causa di IE non conoscere la differenza tra una proprietà e un attributo.)

+0

Non ho mai menzionato l'attributo 'value'. La mia casella di controllo del test non ne ha nemmeno uno. Quindi non sono sicuro di come si applica il primo paragrafo, ma la proprietà defaultChecked era la chiave. Grazie! – Kev

+0

Modificato, grazie ancora. – Kev

+0

È background: checked/defaultChecked è il caso speciale di value/defaultValue per le checkbox (similmente selezionato/defaultSelected per opzioni). – bobince

-3

checked = '', è corretto, credo. Sospetto che il browser stia cercando di essere amichevole quando fai checked = false e facendo l'azione equivalente, checked = ''.

+2

Provato. Non sembra cambiare il risultato. Inoltre, in base a https://developer.mozilla.org/en/XUL/checkbox, la proprietà selezionata è di tipo booleano. – Kev

+0

Forse sono confuso. Qualcosa non funziona come ti aspetti? –

+0

Scusa, avevo cercato di esprimerlo nella domanda. Prevedo di impostare la proprietà '.checked' per avere un effetto sull'attributo HTML (specialmente dal momento che ha un effetto sull'interfaccia utente.) Ma l'attributo HTML non cambia, non importa quale sia inizialmente impostato. Questo sembra abbastanza incoerente. – Kev

-2

Si può essere in attesa Firebug per visualizzare le informazioni del valore in modo simile a come style viene aggiornato nel HTML riquadro di ispezione. Tuttavia, input, select, option e textarea non si comportano allo stesso modo e i valori non verranno aggiornati in questo riquadro e verranno sempre visualizzati i valori originali (quelli in fase di rendering della pagina). Se l'interfaccia utente è in fase di aggiornamento, allora sai che lo stai facendo bene.

+0

Questo non è vero. Provalo tu stesso con un elemento HTML 'a' senza attributo valore - esegui di nuovo le righe' a', 'a.value = 7' e' a'. – Kev

+0

Mi spiace, quello che ho detto resta valido, ma dovrei chiarire che 'a' era una variabile JavaScript che puntava a un elemnt di input' HTML'. Probabilmente si è verificato come se intendessi un tag di ancoraggio. – Kev

+0

Si è imbattuto in questo modo, ma ho eliminato quel commento in quanto non è più necessario. Tuttavia, non capisco lo scenario che stai cercando di descrivere nel tuo primo commento, in particolare con "e' a' again " –

Problemi correlati