2012-03-30 6 views
6

Sto aggiornamento da jQuery 1.5.1 - ho letto circa il modo "nuovo" a "controllare" le caselle di controllo (in 1.6) utilizzandoQual è il modo corretto per deselezionare una casella in jQuery 1.7?

prop("checked", true); 

Ma qual è il modo corretto/preferito da rimuovere una casella di controllo?

Entrambi questi metodi sembrano funzionare

$('#someSelector').removeProp("checked"); 

o

$('#someSelector').prop("checked", false); 

Esiste una distinzione tra questi metodi? Quale dovrei usare?

Grazie

risposta

12

Secondo http://api.jquery.com/removeprop/ .removeProp non deve essere utilizzato per rimuovere controllato. (perché è completamente rimosso e non può essere aggiunto nuovamente.)

Il metodo .removeProp() rimuove le proprietà impostate dal metodo .prop().

Con alcune proprietà incorporate di un elemento DOM o di un oggetto finestra, i browser possono generare un errore se viene effettuato un tentativo di rimuovere la proprietà . jQuery prima assegna il valore non definito alla proprietà e ignora qualsiasi errore generato dal browser. In generale, è necessario solo per rimuovere le proprietà personalizzate che sono state impostate su un oggetto, e non per le proprietà native (native).

Nota: non utilizzare questo metodo per rimuovere proprietà native come selezionato, disabilitato o selezionato. Questo rimuoverà completamente la proprietà e, una volta rimosso, non potrà essere aggiunto di nuovo all'elemento. Utilizzare .prop() per impostare invece queste proprietà su false.

-1
$('#someSelector').removeAttr('checked'); 

rimuovere l'attributo controllato e si dovrebbe essere a posto.

Ulteriori informazioni su prop vs attr qui. Inoltre menzionano l'attributo verificato e lo chiamano specificatamente come attributo, non come proprietà.

http://api.jquery.com/prop/

+0

Questo non risponde alla domanda ... perché la risposta è migliore di '.removeProp (" checked ")'? E perché è meglio dell'alternativa '.prop (" checked ", false)' o '.attr (" checked ", false)'? – Sparky

+1

"attributi" sono un sottoinsieme di "proprietà", quindi usare sempre "prop" al posto di "attr' è perfettamente accettabile, e non devi mai capire se una" proprietà "è un" attributo ". – Sparky

+1

I documenti jQuery a cui ti riferisci in realtà dicono che in questo caso è preferibile usare prop(). "Se si utilizza jQuery 1.6, il codice if ($ (elem) .attr (" checked ")) recupererà l'attributo del contenuto effettivo, che non cambia quando la casella è selezionata e deselezionata. Si intende solo per memorizzare il valore predefinito o valore iniziale della proprietà selezionata. " – Niko

3

hiya ho anche se il mio commento di cui sopra saranno troppo testo stipata in modo da scrivere qui per chiarezza: (e sono d'accordo con @Claudio)

Se questo non risolve il problema fatemi sapere Rimuoverò i miei post cheers! :)

così da qui: http://blog.jquery.com/2011/05/12/jquery-1-6-1-released/

[quote] come di 1.6 i sa ...

elemento valore è qualcosa di diverso, allora è di proprietà o il valore dell'attributo . Quando si deseleziona una casella di controllo, si desidera rimuovere la proprietà controllata in modo da utilizzare $ ("# subscribe: checked"). Prop ("checked", false);

[quote]

jQuery 1.6 +

Utilizzare la funzione nuova .prop():.

$ ("MyCheckBox ") prop (" controllato" , vero);

$ (". MyCheckbox"). Prop ("checked", false);

Setting "checked" for a checkbox with jQuery? spero che sia d'aiuto, hai ragione, penso! Saluti!

11

Per rispondere alla tua domanda più precisamente:

mi sarebbe sempre preferiscono

$('#someSelector').prop('checked', false); 

oltre

$('#someSelector').removeProp('checked'); 

perché una differenza importante tra attributi e proprietà è, in questo caso, che rimuovere l'attributo equivale a impostare la proprietà (is-checked) su false.

Rimuovere la proprietà "checked" di una casella di controllo non ha alcun senso, perché la casella di controllo sarà sempre selezionata o deselezionata. Pertanto impostare la proprietà su false per deselezionare la casella è logicamente coerente, la rimozione della proprietà non lo è.

Problemi correlati