Chriz: Formcheck und openBrWindow

Hi!

Gerade versuche ich meinem Formular beizubringen erst die eingegebenen Daten zu checken und dann ein Fenster zu öffnen. Nun bin ich kein JS-Hecht und weiss nicht, was ich ändern muss, damit das Fenster NICHT aufspringt, wenn die Daten nicht komplett sind.

Hier das Script:

function test() {

var str = document.Upload.titel.value;

if (str == "" ) {

alert("\nDas Feld TITEL ist leer.\n\nBitte geben Sie einen Titel für die Datei an.")

document.Upload.titel.focus();

return false;

}

for (var i = 0; i < str.length; i++) {

var ch = str.substring(i, i + 1);

if (((ch < "a" || "z" < ch) && (ch < "A" || "Z" < ch)) && ch != ' ' && ch != 'ä' && ch != 'ö' && ch != 'ü' && ch != 'Ä' && ch != 'Ö' && ch != 'Ü') {

alert("\nDas Titel-Feld akzeptiert nur Buchstaben und Leerzeichen.\n\nBitte geben Sie den Titel nochmal ein.");

document.Upload.titel.select();

document.Upload.titel.focus();

return false;

}

}
}
function MM_openBrWindow(theURL,winName,features) { //v2.0
window.open(theURL,winName,features);
}

<form name="Upload" enctype="multipart/form-data" method="post" action="upload.php" onSubmit="test(); MM_openBrWindow('up.htm','Poster','resizable=yes,width=200,height=25')">

Kann mir jemand helfen?

Ürigens, wie kann ich die Formulardaten an das zu öffnende Fenster weitergeben? Vielleicht muss ich in dem Fenster noch damit arbeiten?

Mit bestem Dank,

Chriz!

  1. Hi,

    ich würde in die form ein input-element vom Typ Button reinsetzen und dann die Prüfung mit onClick="chkFrm()" ausführen und das Submit mit frm.Submit() in chkFrm() ausführen lassen. - Mach ich immer so.

    chkFrm() ist prima wiederverwertbar und sollte ausgelagert werden.

    Gruss,
    Lude

    1. Hi,

      Hallo!

      ich würde in die form ein input-element vom Typ Button reinsetzen und dann die Prüfung mit onClick="chkFrm()" ausführen und das Submit mit frm.Submit() in chkFrm() ausführen lassen. - Mach ich immer so.

      Whoops! Der Zug ist an mir vorbeigerast... Ich glaube, dass ich das Grundprinzip der Lösung verstanden habe, aber irgendwas fehlt noch, um das Lämpchen zum Glühen zu bringen.

      Könntest Du mir das nochmal feinfühliger erklären? Bitte!

      chkFrm() ist prima wiederverwertbar und sollte ausgelagert werden.

      Gruss,
      Lude

      Gruss,

      Chriz!

      1. Hi,

        also

        HTML-Datei



        <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//GER">

        <html>

        <head>   <title>Weblease Netbusiness AG - Web-Shop></title>   <meta http-equiv="Author" content="Ludger Keitlinghaus">   <meta http-equiv="expires" content="0">   <link rel=stylesheet type="text/css" href="#Supplier_GUID_CSS">   <script language="JavaScript" src="../js/web_shop.js" type="text/javascript"></script>   <script language="JavaScript">     function Submit_Form()       {       var RetCode = chkfrm("'");       if (RetCode == "") {document.Lst_Products_Prepare_1.submit();}       else {alert (RetCode);}       }   </script> </head>

        <body>   <form name="Lst_Products_Prepare_1" action="ws-lst.pl" method="Post">     <h1>       Produktsuche:     </h1>     <table border="0">       <tr>         <td>           Produktklasse         </td>         <td>           <select name="Product_AssetClass_GUID" style="width:220px;">     <!--LST_ASSET_CLASSES_AND_ASSET_CATEGORIES-->   </select>         </td>       </tr>       <tr>         <td>           Produktname         </td>         <td>           <input maxlength="50" type="text" name="Product_Name" style="width:220px;">         </td>       </tr>       <tr>         <td>           Verkaufspreis-Minimum         </td>         <td>           <input id="ZAHL" maxlength="50" type="text" name="Product_Cost_Minimum"                  style="width:220px;text-align:right;" align="right" value="0">         </td>       </tr>       <tr>         <td>           Verkaufspreis-Maximum         </td>         <td>           <input id="ZAHL" maxlength="50" type="text" name="Product_Cost_Maximum"                  style="width:220px;text-align:right;" align="right" value="1000000">         </td>       </tr>       <tr>         <td>           Währung         </td>         <td>           <select name="Product_CostCurrency" style="width:220px;">     <!--LST_CURRENCIES-->   </select>         </td>       </tr>     </table>     <br>     <input type="hidden" name="Session_GUID" value="#Session_GUID">     <input type="hidden" name="WhatToDo" value="Lst_Products_Prepare_1">     <input type="button" value="Produkt suchen!" onclick="JavaScript:Submit_Form()">   </form>   <form name="Lst_Products" action="ws-lst.pl" method="Post">       <!--LST_PRODUCTS-->     <input type="hidden" name="Session_GUID" value="#Session_GUID">     <input type="hidden" name="WhatToDo" value="Lst_Products">   </form> </body>

        </html>

        JS-Datei (Auszug)



        /* tauscht für SQL-Statements kritsche Hochkommata und Anfuehrungszeichen aus    ID="ZAHL"   -   Eingabefeld muss numerisch sein; Dezimaltrenner Komma wird durch Punkt ersetzt      ="DATUM"  -   Eingabefeld muss "profikorrekte" JS-Pruefung bestehen      ="ML<x>"  -   Eingabefeld muss Mindestlänge haben    Zurückgegeben wird die Variable ReturnValue, die fuer den Nutzer "alerted" werden koennte.    Zudem werden fuer SQL-Zwecke Hochkommata durch doppelte Hochkommata ersetzt. */ function chkfrm(ZeichenZumAustauschen)   {   // das gibt die Funktion zurueck   var ReturnValue = "";   // schnappt sich alle HTML-Select-Elemente des Dokuments   for(i=0;i<document.getElementsByTagName("select").length;++i)     {     // prueft auf getroffene Auswahl     if (document.getElementsByTagName("select")[i].value == "")       {       ReturnValue = ReturnValue +                     "Fehler im Auswahlfeld "" +      document.getElementsByTagName("select")[i].name +      "" (keine Auswahl getroffen)\n";       }     }   // schnappt sich alle HTML-Input-Elemente des Dokuments   for(i=0;i<document.getElementsByTagName("input").length;++i)     {     // schnappt sich alle HTML-Input-Elemente des Typs "text"     if (document.getElementsByTagName("input")[i].type == "text" |         document.getElementsByTagName("input")[i].type == "password")       {       // prueft, ob Eingabefelder mit numerischem Inhalt(ID="ZAHL") korrekt gefuellt sind       if (document.getElementsByTagName("input")[i].id == "ZAHL")         {         // ersetzt Kommata durch Punkte         while (document.getElementsByTagName("input")[i].value.search(/,/) != -1)           {           document.getElementsByTagName("input")[i].value =           document.getElementsByTagName("input")[i].value.replace(/,/,".");           }         // prueft auf Zahl         if (document.getElementsByTagName("input")[i].value == "" ||             isNaN(document.getElementsByTagName("input")[i].value) == true)           {           ReturnValue = ReturnValue +                         "Fehler im Eingabefeld "" +          document.getElementsByTagName("input")[i].name +          "" (kein numerischer Wert)\n";    }         }       // prueft, ob Eingabefelder mit einem Datum als Inhalt(ID="DATUM") korrekt gefuellt sind       if (document.getElementsByTagName("input")[i].id == "DATUM")         {         var d = "";         // liegt ein achstelliger interpretierbarer Datumswert vor?         if (document.getElementsByTagName("input")[i].value.length == 8)   {   d = document.getElementsByTagName("input")[i].value.slice(6,8) +       "/" +       document.getElementsByTagName("input")[i].value.slice(3,5) +       "/" +       document.getElementsByTagName("input")[i].value.slice(0,2);   }         // liegt ein zehnstelliger interpretierbarer Datumswert vor?         else if (document.getElementsByTagName("input")[i].value.length == 10)   {   d = document.getElementsByTagName("input")[i].value.slice(6,10) +       "/" +       document.getElementsByTagName("input")[i].value.slice(3,5) +       "/" +       document.getElementsByTagName("input")[i].value.slice(0,2);   }         var datum = new Date(d);         // liegt ein interpretierbarer Datumswert vor?         if (isNaN(Number(datum)))   {   ReturnValue = ReturnValue +          "Fehler im Eingabefeld "" +          document.getElementsByTagName("input")[i].name +                 "" (kein Datumswert)\n";   }         }       // prueft, ob Eingabefelder mit einem Datum als Inhalt(ID="DATUM") korrekt gefuellt sind       if (document.getElementsByTagName("input")[i].id.substr(0,2) == "ML")         {         if (document.getElementsByTagName("input")[i].value.length <             document.getElementsByTagName("input")[i].id.substr(2,1))           {   ReturnValue = ReturnValue +          "Fehler im Eingabefeld "" +          document.getElementsByTagName("input")[i].name +                 "" (Mindestlänge(" +                         document.getElementsByTagName("input")[i].id.substr(2,1) +                         ") unterschritten)\n";           }         }       // SQL-Check, wenn alle Eingabefelder korrekt gefuellt worden sind:       if (ReturnValue == "")         {         // da sich theoretisch die Zeichenlaenge verdoppeln kann:         document.getElementsByTagName("input")[i].maxLength =         document.getElementsByTagName("input")[i].maxLength * 2;         // durchlaeuft das uebergebene "Array"         for(j=0;j<ZeichenZumAustauschen.length;++j)   {   // schreibt zwei Zeichen statt einem   var s1 = ZeichenZumAustauschen.substr(j,1);   var s2 = s1 + s1;   // durchlaeuft die Zeichenkette   for(k=0;k<document.getElementsByTagName("input")[i].value.length;++k)     {     // ersetzt     if (document.getElementsByTagName("input")[i].value.substr(k,1) == s1)       {       document.getElementsByTagName("input")[i].value =       document.getElementsByTagName("input")[i].value.slice(0,k) +       s2 +       document.getElementsByTagName("input")[i].value.slice(k+1)               k = k + 1;       }     }   }         }       }     }     return ReturnValue;   }





        Wichtig ist halt <input type="button" value="Produkt suchen!" onclick="JavaScript:Submit_Form()">

        dann wird   <script language="JavaScript">     function Submit_Form()       {       var RetCode = chkfrm("'");       if (RetCode == "") {document.Lst_Products_Prepare_1.submit();}       else {alert (RetCode);}       }   </script> aufgerufen

        was wiederum auf die Funktion in der JS-Datei zugreift

        Der Code läuft so übrigens nicht; ist irgendwo herausgepflückt. chlFrm liefert einen Leerstring zurück oder halt eine Fehlermeldung. In Abhängigkeit des Strings wird das form submitted oder es wird was alerted.

        Hoffe, das hilft. Gruss, Lude

  2. Hi,

    wie wäre es einfach damit?

    function inhalt()
    { if (document.Formularname.Feldname1.value == "" ||
          document.Formularname.Feldname2.value == "" ||
          document.Formularname.Feldname3.value == "" ||
          document.Formularname.Feldname4.value == "")
     {neuesfenster = open ("Angabe_wo_Datei_fuer_neues_Fenster_steht", "anzeigeFenster", "height=50,width=300");
         neuesfenster.focus();
       }
    }

    Gruss,
    Joan