Checkbox prüfen mit JS

potschi

Grünschnabel
Hallo,
ich habe ein Formular erstellt wo einige Felder zwingend ausgefüllt werden müssen. Der JScript für die Textfelder sieht folgendermassen aus: onClick="MM_validateForm('Anrede','','R','Vorname','','R','Nachname','','R');return document.MM_returnValue". Für die AGB habe ich eine CheckBox welche auch zwingend markiert werden muss. Wenn ich die CheckBox in diesen Script einfüge, funktioniert dies nicht. Kann mir jemand zeigen wie ich dies machen kann?
Einige PHP-Scripts habe ich in den Foren gefunden, aber damit kenne ich mich leider überhaupt (noch) nicht aus :(

Gruess potschi
 
Wie wäre es, wenn du noch die Funktion MM_validateForm() posten würdest? Steht der onclick im submit-Button oder in den Textfeldern selbst?
 
Dies ist der erste Teil vom Script.....
Code:
function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue = (errors == '');Der onclick steckt im SubmitButton. 

..und dies der zweite Teil (auf dem Submit-Button)

<input name="Buchung" type="submit" id="Buchung" onClick="MM_validateForm('Anrede','','R','Vorname','','R','Nachname','','R','Adresse','','R','PLZ','','R','Ort','','R','Telefon','','R','Email','','R');return document.MM_returnValue" value="senden">

Bin echt dankbar für Hilfe!!

Gruess, Potschi
 
Das nächste Mal poste das bitte in einer einigermaßen von Menschen lesbaren Form, also mit Einrückung und Leerzeichen und benutze so schöne Code-Boxen, wie ich unten in diesem Beitrag.

Soweit ich das Überblicken kann wird auch noch die Funktion MM_findObj() aufgerufen, die aber nicht in deinem Source-Code vorkommt, die könntest du auch noch posten. Des weiteren ist die Funktion selber ziemlich umständlich und macht stellenweise gar keinen Sinn: Manche Argumente werden gar nicht verwendet, es gibt 7 öffnende und 6 schließende Klammern, usw.
Ich würde einfach mal die if ((val=val.value)!="") durch if (!!(val=val.value) || val.checked) ersetzen und schaun, ob es mit der Checkbox dann klappt.
Alles sehr komisch, aber vielleicht blick ich auch einfach nicht durch ohne das ganze richtig einzurücken.

Ansonsten schreib in den submit folgendes und lass die Funktion funktion sein:
HTML:
	<input name="Buchung" type="submit" id="Buchung" onClick="
              		MM_validateForm(
              			'Anrede','','R',
              			'Vorname','','R',
              			'Nachname','','R',
              			'Adresse','','R',
              			'PLZ','','R',
              			'Ort','','R',
              			'Telefon','','R',
              			'Email','','R'
              		);
              		return document.getElementById('idDerAGBcheckbox').checked;
              		return document.MM_returnValue
 	" value="senden">
Das ist allerdings eher eine Lösung die meiner Faulheit entsprang: Ich wollte dein unlesbares Script nicht auseinander friemeln. Naja, so müsste es auf jeden Fall funktionieren.
 
Zuletzt bearbeitet:
Hallo,

Ich habe all Deine Vorschläge durchprobiert, aber es fragt dieses Feld einfach nicht ab. Wenn ich "if ((val=val.value)!="") durch if (!!(val=val.value))" ersetze ändert sich nichts. Wenn ich die Funktionen lösche und Deinen HTML-Code einfüge dann wird das Formular ohne Abfrage gesendet. Wenn ich die Funktionen wieder einfüge zusätzlich zu Deinem HTML-Code dann fragt es alle Felder ausser die agb' ab. Sniff!! was mache ich falsch
 
Du sollst es ja auch in if (!!(val=val.value) || val.checked) ändern.

Egal, hab meinen Post inzwischen editiert: Beim zweiten Vorschlag, hab ich nämlich einen kleinen Fehler gemacht, der funktioniert jetzt aber garantiert. Es muss natürlich document.getElementById().checked und nicht .value heißen - Macht der Gewohnheit.

Du hast allerdings immer noch nicht die Funktion MM_findObj() gepostet
 
Zuletzt bearbeitet:
[offtopic]
Ich glaube, die MM_sonswas-Funktionen, die Dreamweaver in die Seiten setzt, sind zum größten Teil deshalb so unlesbar geschrieben, damit kein vernünftiger Mensch auf die Idee kommt, sie zu ändern oder verbessern. ^^
[/offtopic]

MM_findObj() gibt eine Referenz auf das Objekt mit dem übergebenen name/id zurück.

Gruß
.
 
Hallo,

Funktioniert einfach nicht. Wenn ich wie in der ersten Variante die if ((val=val.value)!="") durch if (!!(val=val.value) || val.checked) ersetze, passiert nichts.

In der zweiten Variante mit dem ändern des Value zu checked, werden die AGB's einfach auch nicht abgefragt. Schlimmschlimm.... :(

Hier mal noch der fehlende Script. Bitte nicht böse sein dass ich diesen wieder so "unattraktiv" schicke. Ich weiss einfach nicht was zusammengehört und kann den nicht auseinander nehmen. Ich seh da einfach nicht durch und habe schon zum x-ten mal in die Tischkante gebissen

Also Script in Head:
Code:
<script language="JavaScript">
<!--
function mmLoadMenus() {
  if (window.mm_menu_1027204953_0) return;
  window.mm_menu_1027204953_0 = new Menu("root",48,15,"Verdana, Arial, Helvetica, sans-serif",9,"#FFFFFF","#FF0000","#000000","#666666","left","middle",3,0,1000,-5,7,true,false,true,0,true,true);
  mm_menu_1027204953_0.addMenuItem("","");
   mm_menu_1027204953_0.hideOnMouseOut=true;
   mm_menu_1027204953_0.bgColor='#555555';
   mm_menu_1027204953_0.menuBorder=1;
   mm_menu_1027204953_0.menuLiteBgColor='#FFFFFF';
   mm_menu_1027204953_0.menuBorderBgColor='#777777';

          
  mm_menu_1027204953_0.writeMenus();
} // mmLoadMenus()

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if (!!(val=val.value) || val.checked) {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' ist erforderlich.\n'; }
  } if (errors) alert('Bitte die fehlenden Eingaben noch eintragen:\n'+errors);
  document.MM_returnValue = (errors == '');
}
//-->
</script>
<script language="JavaScript" src="mm_menu.js"></script>
</head>
<body link="#003366" vlink="#666666" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<script language="JavaScript1.2">mmLoadMenus();</script>
Noch ein Script im Body:
Code:
<script language="JavaScript1.2">mmLoadMenus();</script>


Der Submitbutton sieht folgendermassen aus:
Code:
<input name="Buchung" type="submit" id="Buchung" onClick="
              		MM_validateForm(
              			'Anrede','','R',
              			'Vorname','','R',
              			'Nachname','','R',
              			'Adresse','','R',
              			'PLZ','','R',
              			'Ort','','R',
              			'Telefon','','R',
              			'Email','','R'
	             		);
              		return document.getElementById('agb').checked;
              		return document.MM_returnValue
 	" value="senden">

Schon mal Danke für die Hilfe,
euer Potschi



<edit by mod>code-boxes eingefügt... sieht doch gleich netter aus, oder ;)</edit>
 

Neue Beiträge

Zurück