DannyLupo: Typkonflikt bei Variablen-Übergabe an Funktion

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.

  1. 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

    --
    LeagueEditor JavaScript kostenlose Ligaverwaltung || richtig Messen will gelernt sein
    1. 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.

  2. 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

    --
    Hier könnte Ihre Werbung stehen.
    Kabelkuddelmuddel || Steuerfreie Geburtsbeihilfen?  || RT 221 Erfurt-Altstadt i.V.
    1. "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

      --
      Hier könnte Ihre Werbung stehen.
      Kabelkuddelmuddel || Steuerfreie Geburtsbeihilfen?  || RT 221 Erfurt-Altstadt i.V.
      1. "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.