Typkonflikt bei Variablen-Übergabe an Funktion
DannyLupo
- javascript
Hi!
Leider komme ich auf die Lösung meines Problems auch nach langem Überlegen nicht von alleine.
Deswegen folgende Frage an euch:
(Habe mein Script mal aufs Kernproblem heruntergeschrumpft:)
<html>
<head>
<script language=JavaScript>
<!--
function add(x) { alert(x); }
//-->
</script>
</head>
<body>
<form name="tabelle">
<table>
<tr><td>
<select name="albname" onChange="add(this.form.albname.options[this.form.albname.selectedIndex].value)" size="1">
<option value=30>Standard</option>
<option value=31>rot</option>
<option value=32>dunkelrot</option>
<option value=33>orange</option>
</select>
</td></tr>
</table>
</form>
</body>
</html>
Hier klappt die Funktion "add" nicht, wenn ich die Aktion mittels des Event-Handlers in der Liste übergebe.
Fehlermeldung: Typkonflikt.
Wenn ich statt dem "add" aber "alert" im select-Tag schreibe, wird mir zwar 30, 31, etc. angezeigt, bei "add" kann ich diese Zahl aber nicht an selbige Funktion übergeben. Warum nicht?
Habe auch schon versucht, x=number(x) noch einzufügen oder x=parseInt(x).. das hilft aber auch nicht.
Hat jemand eine Idee?
Vielen Dank im Voraus!
Danny.
Hallo DannyLupo,
Ich habe Deine Angaben mal korrigiert:
<script type="text/javascript">
function foo(x) {
alert(x);
}
</script>
</head>
<body>
<form name="tabelle">
<select name="albname" onchange="foo(this.options[this.options.selectedIndex].value)" size="1">
<option value="30">Standard</option>
<option value="31">rot</option>
<option value="32">dunkelrot</option>
<option value="33">orange</option>
</select>
</form>
Dabei ist mir aufgefallen, das add ein Schlüsselwort sein muss, welches Du nicht verwenden darfst - zumindest mag es mein FF nicht. Erst ein umbenennen brachte den gewünschten Erfolg.
Mit freundlichem Gruß
Micha
Dabei ist mir aufgefallen, das add ein Schlüsselwort sein muss, welches Du nicht verwenden darfst - zumindest mag es mein FF nicht. Erst ein umbenennen brachte den gewünschten Erfolg.
Vielen Dank!
Das war es anscheinend wirklich.
Schönen Gruß,
Danny.
Hell-O!
Leider komme ich auf die Lösung meines Problems auch nach langem Überlegen nicht von alleine.
"add" ist eine Methode des HTML-Elementobjekts select, also als Funktionsname denkbar ungeeignet, weil bereits vergeben.
Siechfred
"add" ist eine Methode des HTML-Elementobjekts select, also als Funktionsname denkbar ungeeignet, weil bereits vergeben.
Kleine Ergänzung: Wenn du das Objekt, zu dem die Funktion gehört soll, explizit angibst, funktioniert es auch mit add. Folgendes:
<select name="albname" onChange="add()" size="1">
ist zunächst gleichbedeutend mit
<select name="albname" onChange="this.add()" size="1">
wobei sich this auf das aktuelle Objekt, somit also auf das HTML-Elementobjekt "select" bezieht. Sollte das Objekt diese Methode/Eigenschaft nicht kennen, wird auf das nächsthöhere Objekt im DOM-Baum Bezug genommen, das wäre hier das form-Objekt, wenn das die Methode/Eigenschaft nicht kennt, geht's wieder eine Ebene höher usw. usf. bis hinauf zum window-Objekt. Dort findet Javascript u.a. auch die von dir definierten eigenen Funktionen. Schröbst du also:
<select name="albname" onChange="window.add()" size="1">
wäre alles Bestens, da das window-Objekt keine vordefinierte Eigenschaft oder Methode diesen Namens kennt, sondern nur die von dir definierte Funktion mit dem Namen add.
Siechfred
"add" ist eine Methode des HTML-Elementobjekts select, also als Funktionsname denkbar ungeeignet, weil bereits vergeben.
Vielen Dank auch an dich!
Habe add rausgeschmissen und ersetzt.
Schönen Gruß,
Danny.