WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   HTML und IE: kein disablen von <option> in <select>? (http://www.wcm.at/forum/showthread.php?t=212414)

RaistlinMajere 20.03.2007 18:30

HTML und IE: kein disablen von <option> in <select>?
 
ich möchte innerhalb eines <select>-pulldownmenüs einzelne <option>-einträge über JS deaktivieren. dies funktioniert auch, in dem ich disabled=true setze. allerdings nur im FF, interessanterweise sträubt sich der IE dagegen. die eigenschaft wird zwar gesetzt (kann ich mir als alert ausgeben lassen), nur deaktiviert wird trotzdem nichts.

ich spiele mich damit schon eine ganze weile rum, gibts keine möglichkeit, sowas im IE hinzubekommen?

void 20.03.2007 21:42

scheint mit HTML im IE tatsächlich nicht zu funktionieren...

ev. eine JS lösung?! wäre das tragbar?

RaistlinMajere 20.03.2007 23:23

ich machs eh mit JS, das geht eben nicht. :(

void 21.03.2007 07:59

aso, sry:
1) überlesen, dass du per JS die HTML-parameter setzt
2) habe ich jedoch gemeint, einen workaround ohne die HTML-parameter per JS; also selbst dafür sorgen, dass die "disableden" einträge nicht ausgewählt werden bzw danach sofort wieder zum alten eintrag zurückspringen...

zAPPEL 21.03.2007 08:18

Ja, der IE (auch der 7er - pfui) kennt kein disabled="disabled" in den <options>. Du könntest versuchen die einzelnen Options mit Javascript zu entfernen wenn du sie nicht benötigst.

RaistlinMajere 21.03.2007 11:17

entfernen ist zwar möglich, das problem dabei ist aber, daß ich sie später wieder brauche.

jak 21.03.2007 22:19

Evtl. einfach verstecken:
.style.visibility = 'hidden'
bzw.
.style.display = 'none'

jak

RaistlinMajere 26.03.2007 14:15

Zitat:

Original geschrieben von jak
Evtl. einfach verstecken:
.style.visibility = 'hidden'
FF checkts, IE kennt für options kein visibility-attribut.

Zitat:

.style.display = 'none'
das produziert zwar keinen error, bewirkt aber auch nichts.

jak 26.03.2007 15:36

Das einzige was mir noch einfällt wäre die Elemente per JS in einer anderen Variable zu speichern, dann aus dem select zu entfernen und am Ende wieder einzufügen:

Code:

<script type="text/javascript">
var a[2] = document.getElementById('myselect').options[2];
document.getElementById('myselect').options[2] = null;
document.getElementById('myselect').add(a[2], 2);
</script>

jak

void 27.03.2007 10:04

von meiner lösung hältst du nichts?
ist meiner meinung nach noch einfacher als die von jak:
einfach per onchange die "gültigkeit" abfragen - wenn ungültig wieder zurück zu vorigem wert...

RaistlinMajere 27.03.2007 11:11

Zitat:

Original geschrieben von void
von meiner lösung hältst du nichts?
ist meiner meinung nach noch einfacher als die von jak:
einfach per onchange die "gültigkeit" abfragen - wenn ungültig wieder zurück zu vorigem wert...

würde wohl funktionieren, nur stelle ich mir das ehrlich gesagt als user nervig vor, wenn ich auf einen eintrag klicke, und der cursor dann automatisch woanders hinspringt, ohne daß ich mir das unmittelbar erklären kann.

void 27.03.2007 12:47

lösung
 
versuche das hier:
Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html><head><title></title>
<style type="text/css">
option[disabled] { color:lightgrey; }
.disabled { color:lightgrey; }
</style>
<script type="text/javascript">
<!--
var sel_1_default = 0;

function test()
{
  if(document.getElementById("sel_1")[document.getElementById("sel_1").selectedIndex].getAttribute("disabled")==true) document.getElementById("sel_1").selectedIndex = sel_1_default;;
}
//-->
</script>
</head>
<body>
<form action="">
 


    <select id="sel_1" onchange="test()">
      <option>Heino</option>
      <option>Michael Jackson</option>
      <option disabled="true" class="disabled" >Tom Waits</option>
      <option>Nina Hagen</option>
      <option>Marianne Rosenberg</option>
    </select>
  </p>
</form>
</body>
</html>

noch ev. zu verbessern/anzumerken:
  • merken des letzten gültigen eintrages anstatt default-wert
  • die erste CSS-formatierung ist CSS 2.0 und wird erst vom IE 7.0 unterstützt. besser also die class methode verwenden...
  • und die funktion variabel für mehrere listen gestalten

RaistlinMajere 28.03.2007 18:46

hmm, im endeffekt ist das eh in etwa das, was du davor schon vorgeschlagen hast.
sprich es wird der attributwert von disabled abgefragt und, sofern true, die auswahl auf einen bestimmten index (in deinem fall 0, also der 1. eintrag) gesetzt.

das ändert nur leider nichts daran, daß sich der verwunderte user fragen wird, warum auf einmal die auswahl zu einem anderen eintrag "springt", als der, den er ausgewählt hat (denn daß dieser eigentlich disabled sein sollte, sieht er im IE ja nicht).

ich fürchte es wird mir nichts anderes übrigbleiben, als die option-einträge alle zu löschen und dynamisch über new Option() wiederherzustellen.

void 29.03.2007 10:21

ist ja gut...
woran erkennt der user denn im FF das das element disabled ist???

außerdem kannst du ja immer noch den user (z.b. per alert) darauf hinweisen...


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag