Tolwin: submit() mit variablem Target

Hallo Forum,

ich habe ein Seite gebaut auf der sich 3 Radiobuttons befinden.
Je nach Auswahl des Buttons soll ich die Action des Formulars ändern.
Das funktioniert im Moment einwandfrei wie folgt:

function auswahlSeite(y) {
   var y;
   if(y) {
        document.forms[0].action=y;
   }
}
function submit () {
 document.forms[0].submit();
}

Jetzt versuche ich der Action auch noch ein Target mitzugeben.
Die Radiobuttons werden dynamisch aus einer XML generiert. Per
Hidden Field übergebe ich einen Wert in welchem Target die per
Radio gewählte seite aufgerufen werden soll (top, body, usw)

Dazu habe ich das Skript wie folgt angepasst:
function auswahlSeite(y) {
   var y;
   if(y) {
        document.forms[0].action=y;
   }
}
function submit () {
   if ( document.getElementsByName("buttons")[0] = "top") {
 top.body.document.forms[0].submit();
   }
}

Der Wert top ist in diesem Fall eine eigene Definition, bitte nicht irritieren lassen.

Leider funktioniert das obige Konstrukt so nicht. Kann ich irgendwie separat ein Target definieren. Sorry, bin Javascript Einsteiger.

Bin für jeden Hinweis dankbar...
Grüße
Tolwin

  1. Hallo,

    function submit () {
       if ( document.getElementsByName("buttons")[0] = "top") {

    = ist eine Wertzuweisung, der Vergleichoperator lautet allerdings ==

    top.body.document.forms[0].submit();
       }
    }

    Das Formular ist immer im selben Dokument, deshalb wirst du nicht damit weiterkommen, plötzlich in einem anderen Frame danach zu suchen.

    Das Target setzt du mit dem target-Attribut.

    Vom Schema her:

    document.forms.formular.target = document.forms.formular.elements.verstecktesFeld;

    (Angenommen wird <form name="formular"> und <input type="hidden" name="verstecktesFeld">.)

    Du kannst das Formular und das Feld natürlich unterschiedlich ansprechen.

    Mathias

    1. Hallo Mathias,

      danke für die schnelle Antwort.
      Habe es jetzt so versucht zu realoisieren :

      function auswahlSeite(y) {
       var y;
       if(y) {
        document.forms[0].action=y;
        if ( document.forms[0].elements.buttons == "top") {
         document.forms[0].target = "blabla";

      }
       }
      }
      function submit () {
       document.forms[0].submit();
      }

      Leider klappt es so noch nicht. Wie schon gesagt, bitte nicht durch die doppelte Vergabe eines targets wundern. Da muss ich noch optimieren.

      Firefox wirf auch keine Fehlermeldung. Ich komme nicht auf die per Radio ausgewählte seite.

      Hier mal die Einstellungen meiner 3 Radios

      <input type="radio" name="button" value="seite1.html" onchange="auswahlSeite(this.value)">
      <input type="hidden" name="buttons" value="top">

      <input type="radio" name="button" value="seite2.html" onchange="auswahlSeite(this.value)">
      <input type="hidden" name="buttons" value="content">

      <input type="radio" name="button" value="seite3.html" onchange="auswahlSeite(this.value)">
      <input type="hidden" name="buttons" value="fenster">

      Was mache ich falsch?

      Grüße
      Tolwin

      1. Hallo,

        if ( document.forms[0].elements.buttons == "top") {

        Ich wusste nicht, dass du mehrere versteckte Eingabefelder hast, da war dein .buttons[3] usw. natürlich richtiger. Allerdings müsstest du dann irgendwoher die Nummer des Feldes wissen, was uns zur folgenden Frage führt:

        <input type="radio" name="button" value="seite1.html" onchange="auswahlSeite(this.value)">
        <input type="hidden" name="buttons" value="top">
        ...

        Wieso machst du das denn so kompliziert, wozu denn die versteckten Eingabefelder? Wie gesagt bräuchtest du in der funktion auswahlSeite ohnehin Zugriff auf das zugehörige versteckte Feld, also müsstest du z.B. die Nummer übergeben. Aber dann kannst du auch gleich den Fensternamen übergeben:

        <input type="radio" name="button" value="seite1.html" onchange="auswahlSeite(this.value, 'top')">

        function auswahlSeite (uri, target) {  
          document.forms[0].action = uri;  
          document.forms[0].target = target  
        }
        

        Mathias

        1. Ah super, jetzt habs auch ich verstanden =)
          Allerdings brachte es nicht den erwarteten Erfolg.
          Mit derartigem Konstrukt klappt es

          top.body.document.location.href=document.forms[0].action;
          top.document.location.href=document.forms[0].action;
          top.body.content.document.location.href=document.forms[0].action;

          wäre aber immer ein separater Aufruf.
          Daher versuchte ich es so:
          function auswahlSeite(y,x) {
          var y;
          var x;
          if(x == "top") {
           top.body.document.location.href = y;
          }
          }
          function submit () {
           document.forms[0].submit();
          }

          leider funktioniert das so nicht ... sorry für die Fragerei,
          konnte aber per Google nix plausibles finden.

          Danke!

          1. Mahlzeit,

            function auswahlSeite(y,x) {
            var y;
            var x;

            Wenn ich mich mal kurz einmischen dürfte: die Definition von Variablen, die bereits als Parameter im http://de.selfhtml.org/javascript/sprache/funktionen.htm@title=Funktionskopf vorhanden sind, ist Schwachsinn.

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. Danke für den Hinweis ... sind schon raus!

          2. Hallo,

            Allerdings brachte es nicht den erwarteten Erfolg.

            Was ist der erwartete Erfolg?

            Mit derartigem Konstrukt klappt es

            top.body.document.location.href=document.forms[0].action;
            top.document.location.href=document.forms[0].action;
            top.body.content.document.location.href=document.forms[0].action;

            Was versuchst du damit? Was soll dieser Code tun?

            Ich glaube, wir reden über verschiedene Probleme. Ich dachte, du willst die action eines Formulars im aktuellen Dokument ändern? Wie das geht, habe ich dir gezeigt.

            Wenn du jetzt noch zusätzlich in einem Frame das angezeigte HTML-Dokument auswechseln willst, okay, das kommt dann hinzu.

            Wenn top auf das Frameset zeigt und alle Frames entsprechende Namen tragen, dann kannst du einfach notieren:

            top.frames[target].location.href = uri;

            Das bedeutet: Suche im Frameset einen Frame mit dem angegebenen Namen, lade darin die angegebene URI.

            Das jetzt mal als Mutmaßung, denn ich weiß leider nicht, worauf du hinauswillst.

            Mathias

            1. Hallo Mathias!

              Danke, das werde ich heute mal versuchen.

              Grüße
              Tolwin