Johannes: onClick eines Buttons dynamisch ändern mit Parameterübergabe

Hallo,

versuche schon seit einiger Zeit das onClick Ereignis eines Buttons zu ändern und der jeweiligen Funktion einen Parameter zu übergeben.
Ich habe ein Formular mit x Eingabefeldern und x Buttons. Die Anzahl x variiert. Die Buttons habe ich schon "erzeugt". Mir gelingt aber nicht, der Funktion die bei einem Klick aufgerufen werden soll einen bestimmten  Parameter zu übergeben.

Auszug:

...getElementsByName("speichern")[i].onclick = new Function ("Speichern", "");...

Dies funktioniert auch soweit. Es gibt da nur zwei Probleme:
1. Wie Übergebe ich einen Parameter an Speichern ()?
2. Um die Buttons zu manipulieren öffne ich eine anderes Fenster (PHP-Script, welches Werte aus SQL-Datenbank holt).
alert (document.getElementsByName("speichern")[1].getAttribute('onclick')); gibt nur [object] zurück. Da gibt es wohl ein Problem mit der Funktionsreferenz?!

Vielleicht hattet ihr ja auch schon einmal dieses Problem:

Vielen Dank.

  1. hi,

    versuche schon seit einiger Zeit das onClick Ereignis eines Buttons zu ändern und der jeweiligen Funktion einen Parameter zu übergeben.

    Du kannst den Parameter als Eigenschaft an den Button hängen - und dann in der Funktion auf diese zugreifen.

    button.Eigenschaft = wert;
    button.onclick = Funktion;

    function Funktion() {
      alert(this.Eigenschaft);
    }

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi,

      versuche schon seit einiger Zeit das onClick Ereignis eines Buttons zu ändern und der jeweiligen Funktion einen Parameter zu übergeben.

      Du kannst den Parameter als Eigenschaft an den Button hängen - und dann in der Funktion auf diese zugreifen.

      button.Eigenschaft = wert;
      button.onclick = Funktion;

      function Funktion() {
        alert(this.Eigenschaft);
      }

      gruß,
      wahsaga

      Ich denke das Problem liegt hauptsächlich darin, dass ich versuche den Button aus einem anderen Fenster zu ändern. Mit den anderen Formularelementen funktioniert dies ganz gut, aber mit der Funktion nicht. Wie bereits erwähnt ergibt alert (document. ...) nur die Ausgabe "[object]" und nicht den Funktionsaufruf "Speichern (...)".

      Gruß

      Johannes

      1. hi,

        bitte zitiere sinnvoll, Danke.

        Ich denke das Problem liegt hauptsächlich darin, dass ich versuche den Button aus einem anderen Fenster zu ändern. Mit den anderen Formularelementen funktioniert dies ganz gut, aber mit der Funktion nicht. Wie bereits erwähnt ergibt alert (document. ...) nur die Ausgabe "[object]" und nicht den Funktionsaufruf "Speichern (...)".

        Mal probiert, direkt den Wert von onclick ausgeben zu lassen, anstatt über getAttribute() zu gehen?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Auszug:

    ...getElementsByName("speichern")[i].onclick = new Function ("Speichern", "");...

    new Function kann man, muss man aber nicht. Das ist sinnvoll, wenn du zur Laufzeit aus einem String eine Funktion erzeugen willst und ich vermute mal du willst es nicht.

    Daher ist die schon von wahsaga gezeigte Variante sinnvoller:

    ...getElementsByName("speichern")[i].onclick = function(e)
    {
    // tu_was
    }

    Dies funktioniert auch soweit. Es gibt da nur zwei Probleme:

    1. Wie Übergebe ich einen Parameter an Speichern ()?

    Kannst du in dem obigen Fall ohne Probleme, allerdings willst du das gar nicht, sondern du willst vermutlich auf eine zur Laufzeit vorhandene Variabel in der Funktion zugreifen. Da käme es drauf an zu wissen, was du genau willst.

    1. Um die Buttons zu manipulieren öffne ich eine anderes Fenster (PHP-Script, welches Werte aus SQL-Datenbank holt).
      alert (document.getElementsByName("speichern")[1].getAttribute('onclick')); gibt nur [object] zurück. Da gibt es wohl ein Problem mit der Funktionsreferenz?!

    Da gibt es eher ein Problem mit den von dir verwendeten Browser. Der IE ist nur sehr bedingt geeignet um etwas komplexere JS zu entwickeln, verwende einen Mozilla Browser.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
  3. Hallo,

    meine Vermutung, dass es daran liegt, dass ich über ein anderes Fenster den Funktionswert zuweise, war richtig. Weise die Funktion jetzt wie von wahsaga vorgeschlagen zu, aber im Hauptfenster.
    Vielen Dank für euere Hilfe.

    Grüße
    Johannes

    1. meine Vermutung, dass es daran liegt, dass ich über ein anderes Fenster den Funktionswert zuweise, war richtig.

      In welchen Fenster du einen Funktionswert (du meinst Parameter?) übergibst spielt eigentlich gar keine Rolle.

      Struppi.

      --
      Javascript ist toll (Perl auch!)
      1. In welchen Fenster du einen Funktionswert (du meinst Parameter?) übergibst spielt eigentlich gar keine Rolle.

        Struppi.

        Ich meinte natürlich nicht den Funktionswert, aber auch nicht Parameter. Ich meinte die Funktionsreferenz. Diese wird nicht richtig gesetzt (Ausgabe [object] s.o.) wenn sie von einen anderen Fenster aus gesetzt wird.

        Vielen Dank.

        Johannes

        1. Ich meinte natürlich nicht den Funktionswert, aber auch nicht Parameter. Ich meinte die Funktionsreferenz. Diese wird nicht richtig gesetzt (Ausgabe [object] s.o.) wenn sie von einen anderen Fenster aus gesetzt wird.

          wie gesagt diese Aussage deutet auf den IE hin, was schonmal an sich eine Schwierigkeit darstellt.

          Aber warum du mit new Funktion ein Objekt erhälst ist schon seltsam, ich bekommen (auch im IE) die Meldung: function anonymus....

          var x = new Function('y', 'alert(y)');

          alert(x);

          Struppi.

          --
          Javascript ist toll (Perl auch!)