Combobox in Firefox auswerten ?
Chriss
- javascript
Hi, also ich habe da ein Problem mit dem Auswerten der HTML-Comboboxen.
Ich benötige eine Auswertung des aktuell ausgewählten Eintrages einer Combobox.
Dazu rufe ich im onChange()-Ereignis eine entsprechende JavaScript-Funktion auf.
In dieser Funktion wird das Select-Element der gewählten Combobox ausgewählt und alle untergeordneten option-tags durchgeschleift bis ich eines finde bei dem das selected-attribut gesetzt ist.
Dazu führe ich folgenden Vergleich durch:
if (selChildNode.getAttribute("selected") == Vergleichsparam)
Vergleichsparam ist beim MSIE >TRUE< und bei Firefox ><.
Diese Werte habe ich ermittelt in dem ich mir vorher die Werte des selected-Attributs habe zurückgeben lassen.
Das Problem dabei ist ja dass das selected-Attribut ein leeres Attribut ist.
Das Problem was nun auftritt ist folgendes:
Im MSIE funktioniert das ganze problemlos und ich erhalten den ausgewählten Eintrag zurück.
Bei Firefox bekomme ich jedoch immer genau den Eintrag der beim Laden ser Seite gesetzt wurde und nicht denjenigen den ich zuletzt ausgewählt hatte.
Hier noch ein bisschen Code dazu.
Zunächst die Combobox, bitte nicht hauen, es ist noch mit ASP gemischt.
// Type Combobox
Response.Write("<tr><td><center><select id='Type_Combobox_" + icount + "' name='valtype" + icount + "' size='1' onChange='TypeSelected(" + icount + ")'>");
//onChange='TypeSelected(" + icount + ")'
Response.Write("<option value='E'");
if (strType[icount] == "E") { Response.Write(" selected"); }
Response.Write(">Eingang</option>");
Response.Write("<option value='A'");
if (strType[icount] == "A") { Response.Write(" selected"); }
Response.Write(">Ausgang</option>");
Response.Write("<option value='M'");
if (strType[icount] == "M") { Response.Write(" selected"); }
Response.Write(">Merker</option>");
Response.Write("<option value='S'");
if (strType[icount] == "S") { Response.Write(" selected"); }
Response.Write(">S-Merker</option>");
Response.Write("<option value='Z'");
if (strType[icount] == "Z") { Response.Write(" selected"); }
Response.Write(">Zähler</option>");
Response.Write("<option value='T'");
if (strType[icount] == "T") { Response.Write(" selected"); }
Response.Write(">Zeit</option>");
Response.Write("<option value='D'");
if (strType[icount] == "D") { Response.Write(" selected"); }
Response.Write(">Datenwort</option>");
Response.Write("<option value='L'");
if (strType[icount] == "L") { Response.Write(" selected"); }
Response.Write(">Datenbyte links</option>");
Response.Write("<option value='R'");
if (strType[icount] == "R") { Response.Write(" selected"); }
Response.Write(">Datenbyte rechts</option>");
Response.Write("</select></center></td>");
Und noch die TypeSelected-Funktion:
function TypeSelected(iRowNumber)
{
var tmpID = "Type_Combobox_" + iRowNumber;
var SelectedType;
var bCancelFunction = false;
// Browser überprüfen und entsprechende globale Variable setzen
CheckBrowser();
var Vergleichsparam = "";
// Parameter für Vergleich setzen, um zu schauen welcher Wert ausgewählt wurde
switch (varBrowser)
{
case "MSIE":
Vergleichsparam = true;
break;
case "Firefox":
Vergleichsparam = "";
break;
default:
bCancelFunction = true;
break;
}
if (bCancelFunction == false)
{
var selChildNode = document.getElementById(tmpID).firstChild;
while (selChildNode != null)
{
//alert(selChildNode.getAttribute("value") + " (selected= " + selChildNode.getAttribute("selected") + ")");
if (selChildNode.getAttribute("selected") == Vergleichsparam)
{
SelectedType = selChildNode.getAttribute("value");
break;
}
selChildNode = selChildNode.nextSibling;
}
}
SelectedType gibt beim Firefox immer 'D' zurück was beim Laden als Initialwert gesetzt wird.
Für Hinweise und Ratschläge wäre ich sehr dankbar.
Gruß
Chriss
Tach,
Dazu führe ich folgenden Vergleich durch:
if (selChildNode.getAttribute("selected") == Vergleichsparam)
das kann nicht funktionieren, da durch das Auswählen ja kein Attribut gesetzt wird, sondern die selected-Eigenschaft geändert wird, nach dieser solltest du auch fragen. Dann kannst du dir auch die unsinnige und üblicherweise nur Fehler erzeugende Browserweiche sparen.
Zunächst die Combobox, bitte nicht hauen, es ist noch mit ASP gemischt.
Serverseitiger Code ist bei Clientseitigen Problemen unsinnig, das hast du selber erkannt, also vermeide es beim nächsten Mal.
SelectedType gibt beim Firefox immer 'D' zurück was beim Laden als Initialwert gesetzt wird.
Das ist ja auch das einzige Option-Element, das das gesuchte Attribut hat.
mfg
Woodfighter
das kann nicht funktionieren, da durch das Auswählen ja kein Attribut gesetzt wird, sondern die selected-Eigenschaft geändert wird, nach dieser solltest du auch fragen. Dann kannst du dir auch die unsinnige und üblicherweise nur Fehler erzeugende Browserweiche sparen.
Uhh, jaa, du hast Recht. Da hab ich wohl völlig in die falsche Richtung gedacht.
SelectedType gibt beim Firefox immer 'D' zurück was beim Laden als Initialwert gesetzt wird.
Das ist ja auch das einzige Option-Element, das das gesuchte Attribut hat.
Gehe ich dann recht in der Annahme dass der MSIE das ganze überaus freundlich bewertet, denn in diesem funktioniert die Abfrage auf das selected-Attribut ?
Nochmal Danke für die Hilfe.
Gruß
Chriss
Tach,
Gehe ich dann recht in der Annahme dass der MSIE das ganze überaus freundlich bewertet, denn in diesem funktioniert die Abfrage auf das selected-Attribut ?
Freundlich für den Nutzer? Vielleicht.
Freundlich für den Seitenersteller? Sicher nicht, wenn ich einen Fehler mache, möchte ich darauf hingewiesen werden.
mfg
Woodfighter
Hallo,
Hi, also ich habe da ein Problem mit dem Auswerten der HTML-Comboboxen.
Es gibt in HTML keine Comboboxen. Du meinst Select-Boxen.
Ich benötige eine Auswertung des aktuell ausgewählten Eintrages einer Combobox.
Dazu rufe ich
http://de.selfhtml.org/javascript/objekte/options.htm#selected_index
Beispiel:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>SELECT</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript">
<!--
function getSelected(sel, selIndex) {
alert(sel.options[selIndex].value);
}
//-->
</script>
</head>
<body>
<form action="#" method="get">
<select name="myselect" size="1" onchange="getSelected(this, this.selectedIndex);">
<option value="a">a</option>
<option value="b">b</option>
<option value="c">c</option>
<option value="d">d</option>
</select>
</form>
</body>
</html>
viele Grüße
Axel