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

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

Mam następujące wymagania:removeAttr() nie usuwając "wyłączone" atrybut w IE

  1. wyłączyć SELECT elementem w celu ograniczenia użytkownikom Wybieranie opcji
  2. niepełnosprawnych SELECT element ma już jakiś element OPCJA wybrany
  3. on przedstawić wydarzenie włączyć wyłączoną elementu SELECT, aby zapisać wybraną wartość

Dodawanie atrybutu "wyłączony" działa dobrze w przypadku IE. Jednak gdy próbuję usunąć atrybut za pomocą metody jQuery revomeAttr(), a następnie zamiast usuwania atrybutu:

  1. metoda dodaje „wyłączone” atrybut do poprzednio włączoną SELECT elementu
  2. metoda nie usuwa „wyłączone” przypisują
+3

Co powiedzie się na '$ (" # elementId "). Attr (" disabled "," ");'? –

+0

Czy możliwe jest ponowne wyłączenie pola wyboru w innym miejscu kodu? bez większej ilości kontekstu jest bardzo trudno powiedzieć. – Qpirate

+1

ustawienie $ ("# elementId"). Attr ("disabled", ""); wyłącza element w IE i Firefox .. ustawiając również $ ("# elementId"). attr ("disabled", false) nie będzie miało żadnego wpływu na IE. –

Odpowiedz

52

Korzystając .prop zamiast .attr aby wpłynąć na stan elementu niepełnosprawnych:

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

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

Aby uzyskać więcej informacji, zobacz .prop() vs .attr().

+0

Jon, wielkie dzięki. Metoda .prop() działa sprawnie. –

+2

Rozważ zaakceptowanie odpowiedzi – ssedano

+6

Wiem, że została ona wysłana z powrotem w '12, ale teraz (w 2015), jeśli używasz IE11, rozwiązanie 'prop' nie rozwiązuje problemu. Wszelkie aktualizacje na ten temat? – cidthecoatrack

3

Zamiast tego można użyć numeru removeProp('disabled'). To zadziałało, podczas gdy removeAttr('disabled') nie.

1

jQuery Docs mówi o .removeProp():

Uwaga: Nie należy używać tej metody, aby usunąć właściwości rodzimych, takich jak zaznaczone> wyłączony lub wybrane. Spowoduje to całkowite usunięcie właściwości i, po> usunięciu, nie będzie można ponownie dodać do elementu. Użyj .prop(), aby ustawić te właściwości> na false.

Dodatkowe uwagi:

W programie Internet Explorer przed wersją 9, stosując .prop(), aby ustawić element DOM> nieruchomość do czegokolwiek innego niż zwykłe wartości pierwotnej (liczba, ciąg znaków, lub> Boolean) może powodować Wycieki pamięci, jeśli właściwość nie zostanie usunięta (za pomocą> .removeProp()), zanim element DOM zostanie usunięty z dokumentu. Aby bezpiecznie> ustawić wartości obiektów DOM bez wycieków pamięci, użyj funkcji .data().