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);
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);
Risposte:
jQuery 3
Come di jQuery 3, removeAttrnon senza impostare la proprietà corrispondente a falsepiù:
Prima di jQuery 3.0, utilizzando
.removeAttr()un attributo booleano, comechecked,selectedoreadonlysarebbe 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.
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.
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.
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);
}
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');
}
$("input[type='checkbox'], input[type='radio']").prop("checked", false).attr("checked", false).removeAttr("checked");
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ù ...