.prop ('verificato', false) o .removeAttr ('verificato')?


115

Con l'introduzione del metodo prop, ora ho bisogno di conoscere il modo accettato di deselezionare una casella di controllo. È:

$('input').filter(':checkbox').removeAttr('checked');

o

$('input').filter(':checkbox').prop('checked',false);

4
Hai letto il post di John Resig? ejohn.org/blog/jquery-16-and-attr
Jared Farrish,

Risposte:


130

jQuery 3

Come di jQuery 3, removeAttrnon senza impostare la proprietà corrispondente a falsepiù:

Prima di jQuery 3.0, utilizzando .removeAttr()un attributo booleano, come checked, selectedo readonlysarebbe anche impostare il corrispondente nome proprietà false. Questo comportamento era richiesto per le versioni precedenti di Internet Explorer ma non è corretto per i browser moderni poiché l'attributo rappresenta il valore iniziale e la proprietà rappresenta il valore corrente (dinamico).

È quasi sempre un errore da utilizzare .removeAttr( "checked" )su un elemento DOM. L'unica volta che potrebbe essere utile è se il DOM verrà successivamente serializzato in una stringa HTML. In tutti gli altri casi, .prop( "checked", false )dovrebbe essere usato invece.

changelog

Quindi .prop('checked',false)è solo il modo corretto quando si utilizza questa versione.


Risposta originale (dal 2011):

Per gli attributi che hanno proprietà booleane sottostanti (di cui checkeduna), removeAttrimposta automaticamente la proprietà sottostante su false. (Notare che questa è una delle "correzioni" di compatibilità con le versioni precedenti aggiunte in jQuery 1.6.1).

Quindi, entrambi funzioneranno ... ma il secondo esempio che hai fornito (usando prop) è il più corretto dei due. Se il tuo obiettivo è deselezionare la casella di controllo, vuoi davvero influenzare la proprietà , non l'attributo, e non c'è bisogno removeAttrdi farlo.


36
@tandu: È possibile , ma non si dovrebbe. Dai documenti: " Nota. Non utilizzare [ removeProp()] per rimuovere proprietà native come selezionata, disabilitata o selezionata. Questa operazione rimuoverà completamente la proprietà e, una volta rimossa, non potrà essere aggiunta di nuovo all'elemento. Utilizza .prop()per impostare queste proprietà su false anziché." removePropè realmente destinato all'uso solo con proprietà personalizzate.
John Flatness

17

usa checked: true, false proprietà della casella di controllo.

jQuery:

if($('input[type=checkbox]').is(':checked')) {
    $(this).prop('checked',true);
} else {
    $(this).prop('checked',false);
}

Possiamo eliminare if, altrimenti utilizzando un liner, $ (this) .prop ('check', $ ('input [type = checkbox]'). Is (': check'));
Yousaf Hassan

8

Consiglio di utilizzare entrambi, prop e attr perché ho avuto problemi con Chrome e l'ho risolto utilizzando entrambe le funzioni.

if ($(':checkbox').is(':checked')){
    $(':checkbox').prop('checked', true).attr('checked', 'checked');
}
else {
    $(':checkbox').prop('checked', false).removeAttr('checked');
}

Sì, per il cromo, usa: $("input[type='checkbox'], input[type='radio']").prop("checked", false).attr("checked", false).removeAttr("checked");
Asta

Uso il componente personalizzato (CSS + JS) per sostituire la radio di input e la casella di controllo. Questo è l'unico modo che funziona per me. Grazie!
Silvio Delgado

3

Un'altra alternativa per fare la stessa cosa è filtrare sull'attributo type = checkbox :

$('input[type="checkbox"]').removeAttr('checked');

o

$('input[type="checkbox"]').prop('checked' , false);

Ricorda che la differenza tra attributi e proprietà può essere importante in situazioni specifiche. Prima di jQuery 1.6 , il metodo .attr () a volte prendeva in considerazione i valori delle proprietà durante il recupero di alcuni attributi, il che poteva causare un comportamento incoerente. A partire da jQuery 1.6, il metodo .prop () fornisce un modo per recuperare esplicitamente i valori delle proprietà, mentre .attr () recupera gli attributi.

Scopri di più ...


2
La domanda era "Quale di questi è più corretto", non "Ci sono altri modi per farlo?". Non sembra che tu abbia tentato di rispondere alla domanda
Andrew Stubbs
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.