Mssmar: Form-Target in Popup

Hallo,

wie kann ich hier die Tagret bestimmen/zwingen?
Die in action aufgerufene Seite muss in einem Popup aufgehen.

Mit dem folgenden Code, wird die Seite in einem neuen Fenster (IE) zwar aufgerufen, aber nicht das was ich in die Function popUp() definiert habe. In FIREFOX geht es in einem neuen TAB auf.

Jemand eine Tipp oder Hinweis?

Vielen Dank und Gruss
Messmar

Beispiel-Code:

  
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  
<html>  
<head>  
 <title>Untitled</title>  
  
  
 <script>  
  function popUp(){  
   window.open('','xxx','width=300, height=500, scrollbars=0, toolbar=0, location=0');  
  }  
  
  function checkForm(formObg){  
   var inputEntry = formObg.thistext.value;  
   if(inputEntry == ''){  
    alert('Value is missing');  
    return false;  
   }else{  
    alert('Fine');  
    formObg.target='xxx';  
    return true;  
   }  
  }  
 </script>  
  
  
</head>  
  
<body>  
<form action="seite.htm" method="post" onsubmit="return checkForm(this)">  
 <input type="text" name="thistext" value="">  
 <input type="Submit" value="Senden">  
</form>  
  
  
</body>  
</html>  
  

  1. Lieber Messmar,

    was haste denn da durcheinandergewürfelt?

    function popUp(){

    und

    onsubmit="return checkForm(this)">

    haben nix miteinander zu tun, oder?

    Desweiteren solltest Du unbedingt als ersten Parameter für window.open eine gültige URL angeben (und wenn die "about:blank" heißt)!

    Und Du weißt auch, dass der Sinn eines Formulars nicht unbedingt der ist, dass das Ergebnis in einem neuen Fenster aufgerufen wird? Lieber lass _für das Formular_ ein neues Fenster aufgehen, in welchem dann das Formular erreichbar ist, um dann dort auch sein Ergebnis anzeigen zu können. Denn die Logik würde ja bedeuten, dass ein Formular auf einer Seite auch auf ebendieser Seite etwas bewirkt, oder nicht?

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Lieber Messmar,

      onsubmit="return checkForm(this)">
      haben nix miteinander zu tun, oder?

      Wieso? zunächst wird das Inputfeld-Value geprüft und am Ende wenn die die Bedingung erfüllt ist, wird das Forkmular raus geschickt und dazu die Target definiert.

      »»Und Du weißt auch, dass der Sinn eines Formulars nicht unbedingt »» »»der ist, dass das Ergebnis in einem neuen Fenster aufgerufen wird?

      Das weiße ich, aber es sollte diesmal leider so sein ;-(

      Gruß
      Messmar

  2. Hallo Mssmar,

    wie kann ich hier die Tagret bestimmen/zwingen?
    Die in action aufgerufene Seite muss in einem Popup aufgehen.

    Du kannst auch einem Form-Tag im Attribut target den Namen des zu öffnenden Fensters zuweisen. Dadurch wird die Seite in einem neuen Fenster aufgerufen.
    Für das Popup musst du im onsubmit des form die popUp-Funktion aufrufen, und dem geöffneten Popup den Namen geben, den du als target definiert hast. Wenn JavaScript deaktiviert ist, wird die Seite in einem neuen, normalen Fenster geöffnet.

    Mit dem folgenden Code, wird die Seite in einem neuen Fenster (IE) zwar aufgerufen, aber nicht das was ich in die Function popUp() definiert habe. In FIREFOX geht es in einem neuen TAB auf.

    Du rufst die Funktion popUp() ja auch nirgendwo auf.
    Im Firefox gibt es die Möglichkeit einzustellen, das in Popups geladene Seiten immer in einem neuen Tab geöffnet werden.

    Viele Grüße aus Freiburg,
    Marian

    --
    Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
    <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
    1. Hallo Marian,

      Du kannst auch einem Form-Tag im Attribut target den Namen des zu öffnenden Fensters zuweisen. Dadurch wird die Seite in einem neuen Fenster aufgerufen.

      [...]

      Das habe ich schon gemacht, aber leider ohne Erfolg ;-(

      Ich muss ja bevor dem Schicken des formulars, die Felder prüfen und anschließend die Target bestimmen. D.h. Ich müsste die Function für das abschicken des Formulars erst aufrufen und anschließen die popUp-Funktion:

        
         onSubmit="return checkForm(this); popUp()"  
      
      

      Aber damit funkz. nicht.

      Deswegen, bin ich auf die gepostete Idee gekommen.

      Gruß
      Messmar

      1. Hallo Mssmar,

        Das habe ich schon gemacht, aber leider ohne Erfolg ;-(

        Wenn du das target erst im JavaScript-Code hinzufügst, wird das Formular bei deaktiviertem JavaScript im selben Fenster abgeschickt. Wenn du das nicht willst, musst du das Attribut target direkt im HTML-Code definieren.

        onSubmit="return checkForm(this); popUp()"

        Bei einem return wird die Ausführung abgebrochen. Du musst popUp() vor das return schreiben. Dann hast du aber das Problem, dass das Popup auch dann geöffnet wird, wenn das Formular nicht komplett ausgefüllt ist. Darum solltest du popUp() innerhalb der Funktion checkForm aufrufen, und zwar nur, wenn das Formular korrekt ausgefüllt wurde.

        Viele Grüße aus Freiburg,
        Marian

        --
        Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
        <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
        1. Hallo Maria,

          danke.

          [...]

          ausgefüllt ist. Darum solltest du popUp() innerhalb der Funktion »» checkForm aufrufen, und zwar nur, wenn das Formular korrekt
          ausgefüllt wurde.

          ;-)) habe ich auch gemacht. Etwa so aber nichts erreicht:

            
             function checkForm(formObg){  
             var inputEntry = formObg.thistext.value;  
             if(inputEntry == ''){  
              alert('Value is missing');  
              return false;  
             }else{  
              alert('Fine');  
              formObg.target='rr';  
              return true;  
                                          popUp();  
             }  
            }  
          
          
          1. Hallo Mssmar,

            return true;
                popUp();

            Informier dich nochmal, was return macht (insbesondere mit dem nachfolgenden Code). Ich habe es dir schon gesagt.

            Viele Grüße aus Freiburg,
            Marian

            --
            Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
            <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
      2. Hallo Marian,

        nicht:

          
          onSubmit="return checkForm(this); popUp()"  
        
        

        sondern:

          
          onSubmit="return checkForm(this); target='xxx'"  
        
        

        Gruß
        Messmar

        1. Lieber Mssmar,

          sondern:

          onSubmit="return checkForm(this); target='xxx'"

            
          auch nicht! ;-)  
            
          `<form action="bla" method="blubb" onsubmit="if (checkForm(this)) popUp(); return false;" target="meinTarget">`{:.language-html}  
            
          Liebe Grüße aus [Ellwangen](http://www.ellwangen.de/),  
            
          Felix Riesterer.
          
          1. Hallo Felix,

            <form action="bla" method="blubb" onsubmit="if (checkForm(this)) popUp(); return false;" target="meinTarget">

            Auch nicht! Sondern:
            if(checkForm(this)) popUp(); else return false;

            Viele Grüße aus Freiburg,
            Marian

            --
            Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
            <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
            1. Liebe Marian,

              hast Recht. Ich war beim onclick-Event. Da muss man immer false zurückgeben, da der Link sonst tatsächlich verweist. Aber hier soll das Formular ja tatsächlich abgeschickt werden!

              Liebe Grüße aus Ellwangen,

              Felix Riesterer.

            2. Hallo Zusammen,

              Auch nicht! Sondern:
              if(checkForm(this)) popUp(); else return false;

              Du hast Recht.
              Ich habe aber das ganze jetzt so gemacht und es funkz.

              Danke noch Mal und Gruß.
              Messmar

              Code:

                
                 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
                
              <html>  
              <head>  
               <title>Untitled</title>  
                
                
               <script>  
                function popUp(){  
                 window.open('','xxx','width=300, height=500, scrollbars=0, toolbar=0, location=0');  
                }  
                
                function checkForm(formObj){  
                 this.formObj  
                 var inputEntry = formObj.thistext.value;  
                 if(inputEntry == ''){  
                  alert('Value is missing');  
                  return false;  
                 }else{  
                  alert('Fine');  
                  formObj.target='xxx';  
                  return true;  
                 }  
                }  
                
                function allTogether(formObj){  
                 if(checkForm(formObj)) popUp(); else return false;  
                }  
               </script>  
                
                
              </head>  
                
              <body>  
                
              <form action="seite.htm" method="post" onsubmit="allTogether(this)">  
               <input type="text" name="thistext" value="">  
               <input type="Submit" value="Senden">  
              </form>  
                
                
              </body>  
              </html>  
              
              
              1. Hallo,

                Hier habe ich wieder "return" vergessewn ;-((

                Also richtig:

                  
                   <form action="seite.htm" method="post" onsubmit="return allTogether(this)">  
                  <input type="text" name="thistext" value="">  
                  <input type="Submit" value="Senden">  
                </form>  
                
                

                Gruß
                Messmar

          2. Hallo Felix,

            <form action="bla" method="blubb" onsubmit="if (checkForm(this)) popUp(); return false;" target="meinTarget">

            Das ist das. Damit funkz. es auf jeden Fall.

            Ich weiße, dass so eine Lösung (Target für Formular in einem Popup zu machen) von der Usibility hier schlecht ist bzw. nicht benüzerfreundlich ist, aber es gibt manchmal solche komische Fälle.

            Danke euch für die Hilfe und Gruß aus Muc