2012-04-20 11 views
20
var disableSelection = function(){ 
    $("#elementId").attr("disabled","disabled");  
}; 

var enableSelection = function(){ 
    $("#elementId").removeAttr("disabled"); 
}; 

devo seguenti requisiti:removeAttr() non rimuovere l'attributo "disabile" in IE

  1. disabilitare elemento SELECT al fine di impedire agli utenti di Selezione delle opzioni
  2. disabilitato elemento SELECT ha già qualche elemento OPTION selezionato
  3. sulla pubblica un evento di abilitazione disattivato elemento SELECT al fine di salvare il valore selezionato

L'aggiunta dell'attributo "disabilitato" funziona bene per IE. Eppure, quando si tenta di rimuovere l'attributo utilizzando il metodo jQuery revomeAttr(), allora invece di rimuovere l'attributo:

  1. metodo aggiunge "disabile" attributo elemento SELECT attivato in precedenza il metodo
  2. non rimuove "disabile" attribuire
+3

Come dire '$ (" # elementId "). Attr (" disabled "," ");'? –

+0

E 'forse riabilitare la casella di selezione da qualche altra parte nel codice? senza più di un contesto è molto difficile dirlo. – Qpirate

+1

impostazione $ ("# elementId"). Attr ("disabled", ""); disabilita l'elemento in IE e Firefox .. anche impostando $ ("# elementId"). attr ("disabled", false) non avrà alcun effetto su IE. –

risposta

52

Uso .prop invece di .attr di influenzare di un elemento stato disabilitato:

var disableSelection = function(){ 
    $("#elementId").prop("disabled", true);  
}; 

var enableSelection = function(){ 
    $("#elementId").prop("disabled", false); 
}; 

Per ulteriori informazioni, vedere .prop() vs .attr().

+0

Jon, molte grazie. Il metodo .prop() funziona senza intoppi. –

+2

Considerare di accettare la risposta – ssedano

+6

So che questo è stato pubblicato nel '12, ma ora (nel 2015), se si utilizza IE11, la soluzione 'prop' non risolve il problema. Qualche aggiornamento su questo? – cidthecoatrack

3

È possibile utilizzare invece removeProp('disabled'). Ha funzionato per me mentre removeAttr('disabled') no.

1

Jquery Docs dice, circa .removeProp():

Nota: non utilizzare questo metodo per rimuovere le proprietà native come controllato,> disabilitata, o selezionato. Questo rimuoverà completamente la proprietà e, una volta> rimosso, non può essere aggiunto di nuovo all'elemento. Usa .prop() per impostare queste proprietà> su false.

Note aggiuntive:

In Internet Explorer precedenti alla versione 9, utilizzando .prop() per impostare un elemento DOM> proprietà per qualcosa di diverso da un semplice valore di base (numero, una stringa, o> booleano) può causare perdite di memoria se la proprietà non viene rimossa (usando> .removeProp()) prima che l'elemento DOM venga rimosso dal documento. Per tranquillamente> impostare valori su oggetti DOM senza perdite di memoria, utilizzare .data().