-
25-06-2011, 04:58 #1
IE8 bug: select option disabled trotzdem per Tastatur auswählbar
Tach zusammen,
ich programmiere gerade ein Berechnungstool. Bei der Eingabe/Auswahl der Daten prüfe ich u.a. Zahlenformate usw. Ich habe mehrere Auswahlfelder im Formular, die sich z.T. je nach gewählter Option gegenseitig bedingen bzw. ausschließen. Soweit so gut, bislang funzt alles wie angedacht.
Ich prüfe zwischendurch mit IE6 / IE8 (sonst nutze ich FF3 / FF4 / seamonkey 2) und wie immer ärgert einen der IE an bekannten Stellen, was man aber irgendwie früher oder (meist) später und umständlich in den Griff kriegt.
Nun kommt aber der Hammer:
einige options innerhalb von select sind disabled="disabled" oder sollen dynamisch geblockt werden. FF macht alles erwartungsgemäß, d.h. die Option wird ausgegraut und ist weder per Maus noch per Tastatur wählbar (was auch sonst - ist ja schließlich disabled).
Nur der Mistbrowser von Bill G. schießt mal wieder den Vogel ab.
Die Optionen sind ausgegraut, per Maus nicht wählbar, aber wenn man sich mit Tab und Anfangsbuchstaben der Option durch das Formular bewegt, dann wird die Option ausgewählt.
Kann man das abstellen? Gibt es einen workaround?
Per removeChild die Option zu entfernen bringts nicht, da dann das $_POST array verändert wird.
style display:none und visibilty:hidden funktionieren auch nicht im IE
Vielen Dank vorab für Eure Hilfe.
So hier ein wenig HTML um das Problem zu testen.
HTML-Code:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta content="text/html; charset=ISO-8859-15" http-equiv="content-type"> <meta http-equiv="imagetoolbar" content="no"> <title>IE Bug Test</title> <script type="text/javascript"> <!-- function irgendwas(){ // do something; } //--> </script> </head> <body> <!-- action, submit, reset werden per js dynamisch aufgerufen --> <form id="try" action="" name="try" method="post"> <label for="auswahl">Auswahlfeld </label> <select id="auswahl" size="1" name="auswahl" onChange="irgendwas()"> <option id="opt1" value="m³" selected="selected">m³</option> <option id="opt2" value="Liter">Liter</option> <option id="opt3" value="cm">cm</option> <option id="opt4" value="kWh" disabled="disabled">kWh</option> </select> </form> </body> </html>
Geändert von scrypter (25-06-2011 um 14:19 Uhr)
-
25-06-2011, 08:34 #2
AW: IE8 bug: select option disabled trotzdem per Tastatur auswählbar
Kannst du bitte mal das HTML zeigen wo das mit nachstellbar ist.
-
25-06-2011, 14:20 #3
AW: IE8 bug: select option disabled trotzdem per Tastatur auswählbar
Klar - ist erledigt, siehe oben
-
25-06-2011, 17:23 #4
AW: IE8 bug: select option disabled trotzdem per Tastatur auswählbar
Ist anscheinend ein IE-Bug...
Hier mal ein Abriss, wie man es umgehen könnte:Code:<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Fenstertitel</title> <script type="text/javascript"> window.onload = function(){ var test = document.getElementById("select"); var oldValue = test.value; test.onchange = function(){ if (this.options[this.selectedIndex].disabled){ this.value = oldValue; } else { oldValue = this.value; } } }; </script> <style type="text/css"></style> </head> <body> <select id="select"> <option value="1">eins</option> <option value="2">zwei</option> <option value="3" disabled>drei</option> </select> </body> </html>
-
25-06-2011, 18:02 #5
AW: IE8 bug: select option disabled trotzdem per Tastatur auswählbar
noch'n Bug - dacht ich's doch
ok, danke erst mal
ich werde das mal testen, wobei die onload function bestimmt ziemlich umfangreich wird und wahrscheinlich auch ein timeout braucht bis das Formular komplett geladen ist...
-
25-06-2011, 18:21 #6
AW: IE8 bug: select option disabled trotzdem per Tastatur auswählbar
Das onload wartet schon, bis das <form> komplett geladen ist.
-
27-06-2011, 01:39 #7
AW: IE8 bug: select option disabled trotzdem per Tastatur auswählbar
So.. - Problem ausgehebelt
dank der Anregung von kkapsner.
Ich habe das allerdings nicht per onload gelöst, sondern über onfocus und onblur der betroffenen selects.
Dazu brauchte ich eine globale Variable und zwei kleine Funktionen.
Wird nun eine disabled Option gewählt, wird das select zurückgesetzt und es gibt eine Meldung.
Besten Dank nochmal für die Unterstützung.
Hier noch der code, passend zum eingangs geposteten Beispiels:
HTML-Code:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta content="text/html; charset=ISO-8859-15" http-equiv="content-type"> <meta http-equiv="imagetoolbar" content="no"> <meta http-equiv="X-UA-Compatible" content="IE=8"> <title>IE Bug Test</title> <script type="text/javascript"> <!-- function irgendwas(){ // do something; } var globalstorage = 0; function backup (sID) { if (navigator.appName == 'Microsoft Internet Explorer') { globalstorage = document.getElementById(sID).selectedIndex; } } function IEbug (bugID) { var i = document.getElementById(bugID).selectedIndex; if (navigator.appName == 'Microsoft Internet Explorer' && document.getElementById(bugID).options[i].disabled) { document.getElementById(bugID).selectedIndex = globalstorage; document.getElementById(bugID).focus(); alert('Aufgrund eines Programmfehlers des Internet Explorers\nkonnten Sie eine falsche Auswahl treffen.\n\nIhre Auswahl wurde automatisch zurückgesetzt.\nBitte wählen Sie eine andere Option aus.'); } } //--> </script> </head> <body> <!-- action, submit, reset werden per js dynamisch aufgerufen --> <form id="try" action="" name="try" method="post"> <label for="auswahl">Auswahlfeld </label> <select id="auswahl" size="1" name="auswahl" onchange="irgendwas();" onfocus="backup(this.id);" onblur="IEbug(this.id);"> <option id="opt1" value="m³" selected="selected">m³</option> <option id="opt2" value="Liter">Liter</option> <option id="opt3" value="cm">cm</option> <option id="opt4" value="kWh" disabled="disabled">kWh</option> </select> </form> </body> </html>
-
27-06-2011, 01:48 #8
AW: IE8 bug: select option disabled trotzdem per Tastatur auswählbar
Das onload war nur dazu da, den EventListener (deine hast du direkt im HTML gesetzt) zu setzten.
Aber warum arbeitest du hier mit onfocus/onblur und nicht auch mit onchange?
-
27-06-2011, 02:01 #9
AW: IE8 bug: select option disabled trotzdem per Tastatur auswählbar
bei onchange bekommt die globale Variable bereits den selectedIndex der neuen Auswahl (also im IE halt u.U. den einer disabled option) übergeben
das select lässt sich dann nicht auf den letzten Index zurücksetzen sondern müsste auf eine feste Vorgabe gesetzt werden
zum Auswählen wird zuerst der focus gesetzt, d.h. ein korrekter Index wird global gespeichert und die Meldung kommt erst beim Verlassen des selects, das gibt dem user die Chance sich selbst zu korrigieren bzw. wenn zwei Optionen den gleichen Anfangsbuchstaben haben durch den zweiten Tastendruck eine gültige Auswahl zu erreichen
-
27-06-2011, 23:51 #10
AW: IE8 bug: select option disabled trotzdem per Tastatur auswählbar
Das mit dem zweiten Tastendruck ist ein Punkt...
Ähnliche Themen
-
disabled <select> per POST übergeben?
Von mareje im Forum JavaScriptAntworten: 2Letzter Beitrag: 11-02-2010, 14:44 -
Select -> Option -> Delete
Von mnemosyne im Forum JavaScriptAntworten: 3Letzter Beitrag: 18-11-2008, 13:43 -
<option> breiter als <select>
Von Nussmischung im Forum CSS und (X)HTMLAntworten: 2Letzter Beitrag: 07-02-2008, 21:42 -
select option :D
Von Skazi im Forum JavaScriptAntworten: 7Letzter Beitrag: 07-12-2004, 16:13 -
Moin, select/option!
Von xxoes im Forum JavaScriptAntworten: 3Letzter Beitrag: 11-03-2002, 10:46
Lesezeichen