So ändern Sie die Farbe deaktivierter HTML-Steuerelemente in IE8 mithilfe von CSS


74

Ich versuche, die Farbe der Eingabesteuerelemente zu ändern, wenn sie mithilfe des folgenden CSS deaktiviert werden.

input[disabled='disabled']{
  color: #666;     
}

Dies funktioniert in den meisten Browsern, jedoch nicht im Internet Explorer. Ich kann alle anderen Stileigenschaften wie Hintergrundfarbe, Rahmenfarbe usw. ändern, nur keine Farbe. Kann jemand das erklären?


2
# 666; hat mich ein wenig kichern lassen :)
Kimi

1
Es war nicht dazu gedacht, es ist nur eine gute graue Farbe für deaktivierte Steuerelemente.
Seth Reno

Siehe diesen Kommentar stackoverflow.com/a/5486152/2906042 Es hat mir geholfen)
Aksana Tolstoguzova

Antworten:


123

Wenn Sie das Attribut deaktiviert verwenden, wird die Farbe des Textes, unabhängig davon, was Sie versuchen, standardmäßig auf Grau gesetzt, mit einem seltsamen weißen Schatten ... Ding ... aber alle anderen Stile funktionieren weiterhin. : - /


1
Ja, aber warum? Verwendet es einen nicht standardmäßigen Filterstil hinter den Kulissen oder so?
Seth Reno

68
Ich hätte diese Antwort fast abgelehnt, aber ich habe mich selbst gestoppt. Ich wollte es tun, weil ich die Antwort hasste; nicht weil die Antwort falsch war. Abstimmung: p
Stephen Sorensen

Ich denke, dies fällt unter die gleiche Kategorie wie die "Friendly Error Pages", M $ versucht nur zu helfen
Guzart

2
Obwohl diese Antwort "richtig" ist, denke ich, dass es nützlich wäre, sie im Wiki zu erstellen und auf andere SO-Fragen zu verlinken, die nützlich sind, um zu dokumentieren, welche Optionen verfügbar sind, um die Situation weniger schlecht zu machen. zB Erzwingen der Hintergrundfarbe auf Weiß, um die Lesbarkeit zu verbessern, Verwenden von JS zum Ändern in Nur Lesen + Erzwingen von Unschärfe auf Fokus, JS zum Anzeigen eines Div anstelle einer Eingabe
Snekse

Seit 4 Jahren wurde eine Verbesserung vorgenommen?
Venzentx

16

Ich hatte das gleiche Problem für <select>Elemente in IE10 und fand eine Lösung, die nur für ausgewählte Elemente funktioniert:

http://jsbin.com/ujapog/7/

Es gibt ein Microsoft-Pseudoelement, mit dem die Textfarbe geändert werden kann:

select[disabled='disabled']::-ms-value {
    color: #000;
}

Die Regel muss eigenständig sein, da sonst andere Browser die gesamte Regel aufgrund eines Syntaxfehlers ignorieren. Weitere Pseudoelemente für andere Internet Explorer finden Sie unter http://msdn.microsoft.com/en-us/library/ie/hh869604(v=vs.85).aspx .

Bearbeiten: Ich denke, die Regel sollte wahrscheinlich sein, select[disabled]::-ms-valueaber ich habe keine älteren IE-Versionen vor mir, um es zu versuchen - bearbeiten Sie diesen Absatz erneut oder fügen Sie einen Kommentar hinzu, wenn dies eine Verbesserung darstellt.


Ich habe IE10 und IE11 ausprobiert und es funktioniert. Achten Sie auf das deaktivierte Attribut. Sie können es auf verschiedene Arten definieren. Es könnte sein disabled, disabled="", disabled="true", disabled="disabled". Leider funktioniert es in IE9 nicht.
Marek

8

Es gibt keine Möglichkeit, Stile für das Attribut disable = "disable" zu überschreiben. Hier ist meine Arbeit, um dieses Problem zu beheben. Beachten Sie, dass ich in meinem Fall nur die Schaltfläche "Senden" auswähle:

if ($.browser.msie) {
    $("input[type='submit'][disabled='disabled']").each(function() {
        $(this).removeAttr("disabled");
        $(this).attr("onclick", "javascript:return false;");
    });
}

Beispiel verfügbar: http://jsfiddle.net/0dr3jyLp/


4

Ich hatte das gleiche Problem mit dem "deaktivierten" Textbereich, der die Schriftfarbe in Grau änderte. Ich habe eine Problemumgehung durchgeführt, indem ich das Attribut "readonly" anstelle des Attributs "disabled" für den Textbereich mit dem folgenden CSS verwendet habe

textarea[readonly] {
border:none; //for optional look
background-color:#000000; //Desired Background color        
color:#ffffff;// Desired text color
}

Es hat für mich wie ein Zauber funktioniert !!, daher empfehle ich, dies zuerst vor jeder anderen Lösung zu versuchen, da es einfach ist, "deaktiviert" durch "schreibgeschützt" zu ersetzen, ohne andere Teile des Codes zu ändern.


Die beste Lösung für mich. Einfach und effizient.
Gaston

3

Ich weiß, dass es eine Weile her ist, seit dieses Thema erstellt wurde, aber ich habe diese Problemumgehung erstellt, und nun ... Es hat bei mir funktioniert! (Verwenden von IE 9)

Die einzige Konsequenz ist, dass Sie den Wert der Eingabe nicht auswählen können.

Verwenden von Javascript:

    if (input.addEventListener)
            input.addEventListener('focus', function(){input.blur()}, true)
    if (input.attachEvent)
            input.attachEvent("onfocus", function(){input.blur()})

Diese Lösung hat den bösen Nebeneffekt der Benutzerfreundlichkeit, dass der Benutzer nicht über ein Kontrollkästchen zum nächsten Steuerelement wechseln kann - igitt. Zumal Sie es geschafft haben, die Benutzerfreundlichkeit browserübergreifend zu brechen.
Robocat

2

Ich habe gerade den gesamten Hintergrund hellgrau gemacht. Ich denke, es ist einfacher / schneller zu erkennen, dass die Box deaktiviert ist.

input[disabled]{
  background: #D4D4D4;     
}

1
Irgendeine Idee, warum dies abgelehnt wird? Es funktioniert in der neuesten Version von IE, FF und Chrome ...
Wouter

3
War die Frage vorher nicht IE8?
fncomp

1

Die Art und Weise, wie ich das Problem des "Deaktivierens" eines Steuerelements im IE ohne das hässliche Grau mit einem Eingabesteuerelement vom Typ = Kontrollkästchen gelöst habe, bestand darin, es aktiviert zu lassen und im Ereignis onclick ein wenig Javascript zu verwenden, um Änderungen zu verhindern:

onclick='this.checked == true ? this.checked = false : this.checked = true;'

3
Ich denke, onclick='return false;'macht das Gleiche, aber einfacher
Philfreo

1

Wie von Wayne erwähnt und drei Jahre später immer noch kein Glück mit IE9, aber ...

Sie könnten versuchen, die zu senken opacity Verwendung von CSS zu verringern, da dies die Lesbarkeit verbessert und den gesamten deaktivierten Status unterstützt.


0

Es ist die Lösung, die ich für dieses Problem gefunden habe:

// wenn IE

inputElement.writeAttribute ("nicht auswählbar", "ein");

//Andere Browser

inputElement.writeAttribute ("disabled", "disabled");

Mit diesem Trick können Sie Ihrem Eingabeelement, das in IE und anderen Browsern in Ihrem nicht bearbeitbaren Eingabefeld funktioniert, ein Stylesheet hinzufügen.


0

Ich habe die Lösungen von user1733926 und Hamid gemischt und einen effektiven Code für IE8 gefunden. Es wäre schön zu wissen, ob er auch in 9/10 funktioniert (?).

<script type="text/javascript">
if ($.browser.msie) {
    $("*[disabled='disabled']").each(function() {
        $(this).removeAttr("disabled");
        $(this).attr("unselectable", "on");
    });
}
</script>

0

Nachdem ich diesen Beitrag gelesen hatte, entschied ich mich, eine Eingabe zu erstellen, die sich ähnlich wie ein deaktiviertes Eingabefeld verhält, aber "schreibgeschützt" war.

Also habe ich es so gemacht, dass es nicht ausgewählt oder mit Registerkarten versehen werden konnte oder einen Mauszeiger hatte, der dem Benutzer die Idee gab, den Wert zu ändern oder auszuwählen.

Getestet auf IE8 / 9, Mozzila 18, Chrome 29

<input name="UserName" class="accountInputDisabled" id="UserName" type="text" readOnly="readonly" value="" unselectable="on" tabindex="-1" onselectstart="return false;" ondragstart="return false;" onmousedown='return false;'/>


input.accountInputDisabled {
    border: 1px solid #BABABA !important;
    background-color: #E5E5E5 !important;    
    color: #000000;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -moz-user-input: disabled;
    -ms-user-select: none;
    cursor:not-allowed;
}

input:focus {
    outline: none;
}          


0

Entfernen Sie das deaktivierte Attribut und verwenden Sie das schreibgeschützte Attribut. Schreiben Sie das erforderliche CSS, um das gewünschte Ergebnis zu erzielen. Dies funktioniert in IE8 und IE9.

zum Beispiel für dunkelgrau,

 input[readonly]{
   color: #333333;     
 }

Das readonlyAttribut ignoriert , wenn der Wert des typeAttributs ist hidden, range, color, checkbox, radio, fileoder buttonso , es könnte nicht funktionieren , da an allen Eingängen zu erwarten
Frinsh


0

Das Problem ist in IE11 gelöst. Wenn das Problem in IE11 weiterhin besteht, überprüfen Sie, ob die Rendering-Engine vom IE verwendet wird.


-2

Bei stackoverflow bin ich auf diesen Code gestoßen, der mir geholfen hat, die CSS-Klasse mit Javascript zu deaktivieren.

$("#textboxtest").prop("disabled", false).removeClass("k-state-disabled");

Der Original-Thread finden Sie unter Anwenden der Klasse mit deaktiviertem k-Status auf Texteingaben - Kendo UI Dachte, ich sollte teilen!


Sie sollten kommentieren, ob dies Kendo-spezifisch ist oder nicht. Nicht sehr hilfreich in seiner aktuellen Zusammensetzung
Yardpenalty.com

-2

Verwenden Sie diese CSS, funktioniert für IE11:

input[disabled="disabled"], select[disabled="disabled"], textarea[disabled="disabled"] {
    opacity:0.99 !important;
    background:black;
    text-shadow:inherit;
    background-color:white;
    color:black
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.