2 Abfragen zu 1 verbinden bzw. integrieren

solala123

Erfahrenes Mitglied
Hallo,
habe wieder ein Problem,

Habe ein Formular erstellt, wo die Formulareingabefelder auf plausibilität überprüft werden. Das funktioniert auch.
Jetzt habe ich das Formular mit checkboxen erweitert und diese sollen abgefragt werden,
wenn alle angeklickt sind soll eine Fehlermeldung erscheinen,

Ich hatte eine Testseite erstellt, wo nur die checkboxen abgfragt werden und mit Euerer Hilfe funktioniert auch das,
aber leider alles nur für sich alleine

Nach tagelangen basteln (komme nicht aus der javascript Ecke) funktioniert entweder die Abfrage der checkboxen oder der Rest.

hier zuerst der teil mit den checkboxen der so funktioniert:
HTML:
<form name="Formular"  action="Testseite.php" method="post"                             
onsubmit="return chkFormular(this, event)" onclick="chkFormular(this, event)">

<label for="montag">Mo.</label>
<input name="Tag" type="checkbox"  id="montag" value="montag">

<label for="dienstag">Di.</label>
<input name="Tag" type="checkbox"  id="dienstag" value="dienstag">

<label for="mittwoch">Mi.</label>
<input name="Tag" type="checkbox"  id="mittwoch" value="mittwoch">

<label for="donnerstag">Do.</label>
<input name="Tag" type="checkbox"  id="donnerstag" value="donnerstag">

<label for="freitag">Fr.</label>
<input name="Tag" type="checkbox"  id="freitag" value="freitag">

<label for="samstag">Sa.</label>
<input name="Tag" type="checkbox"  id="samstag" value="samstag">

<label for="sonntag">So.</label>
<input name="Tag" type="checkbox"  id="sonntag" value="sonntag"> 



<input type="submit" value="senden" name="senden" id="senden">


 
 </form>
  
<script type="text/javascript">
function chkFormular(form, evt) {
    var aktuell = evt.target || evt.srcElement;
    var element = form['Tag'];
    var check = 0;
    for(var i = 0; element[i]; i++){
        if(element[i].checked) check++;
    }
    if(check === element.length){
        alert ("Es dürfen nicht alle Checkboxen markiert werden!");
        check--;
        if(aktuell) aktuell.checked = false;
        return false;
    }
    return true;
}
</script>


und dieser Teil auszugsweise, der für sich auch funktioniert:
Javascript:
<script type="text/javascript">
function chkFormular () {
  if (document.Formular.land.value == "") {
    alert("Bitte Ihren Land eingeben!");
    document.Formular.land.focus();
    return false;
  }
  if (document.Formular.vorname.value == "") {
    alert("Bitte Ihren Vornamen eingeben!");
    document.Formular.vorname.focus();
    return false;
  }
  if (document.Formular.familienname.value == "") {
    alert("Bitte Ihren Familiennamen eingeben!");
    document.Formular.familienname.focus();
    return false;
  }
HTML:
</script>

 <form name="Formular"  action="Eingabe-Resbar.php" method="post"
   onsubmit="return chkFormular()">


      <p><label for="land">Land: </label>*<br>
       <select name="land" id="land"  size="1" maxlength="40" >
       <option>Deutschland</option>
       <option>Italien</option>
       <option>Frankreich</option>
     </select>
     </label>
     </p>
     
            
        <p>
        <label for="vorname">Vorname: *</label>
        <br>
        <input name="vorname" id="vorname" type="text" size="40" maxlength="40" /></p>
                 
        <p><label for="familienname">Familienname: *</label>
        <br>
        <input name="familienname" id="familienname" type="text" size="40" maxlength="40" /></p>


        <label for="montag">Mo.</label>
        <input name="mo" type="checkbox"  id="montag" value="montag">
        
        <label for="dienstag">Di.</label>
        <input name="di" type="checkbox"  id="dienstag" value="dienstag">
        
        <label for="mittwoch">Mi.</label>
        <input name="mi" type="checkbox"  id="mittwoch" value="mittwoch">
        
        <label for="donnerstag">Do.</label>
        <input name="do" type="checkbox"  id="donnerstag" value="donnerstag">
        
        <label for="freitag">Fr.</label>
        <input name="fr" type="checkbox"  id="freitag" value="freitag">
        
        <label for="samstag">Sa.</label>
        <input name="sa" type="checkbox"  id="samtag" value="samtag">
        
        <label for="sonntag">So.</label>
        <input name="so" type="checkbox"  id="sonntag" value="sonntag">
</form>

der Unterschied ist erstens in
onsubmit="return chkFormular()"


und im zweiten Beispiel frage ich ja die Variablen ab,
bei den checkboxen sind es die zusammenfassung
"name =(Tag)"

ich bekomme es nich hin, das beide in einem Formular auf Fehler abzufragen, dafür benötige ich Euere Hilfe,

schonmal besten Dank

mfg
Rainer
 
Und wie sieht es aus wenn du alles zusammen probierst?

Erstelle doch einfach zwei unterschiedliche Funktionen die eine wird beim Senden aufgerufen und die andere beim Anklicken einer Checkbox!
 
Hallo,
ich komme leider aus der SPS Programmierung, ich weiß was du meinst aber ohne Beispiel krieg ich das nicht hin
Wenn ich versuche die Abfrage der checkboxen als if Funktion in den Fehlern zu integrieren, funktioniert nur noch die checkboxabfrage
 
Hier habe ich dir ja ein funktionierendes Beispiel gezeigt wie du es mit den Checkboxen lösen kannst. Dort wird nicht beim Absenden sondern beim Anklicken der jeweiligen Checkbox die Funktion afgerufen. Jetzt machst du es wieder anders und deshalb klappt es auch nicht!?
 
Hallo tombe,
ich habe geschrieben, das es funktioniert weil ich die nächsten Tage wieder beruflich unterwegs war, leider hat es nicht funktioniert und habe durch google und herumfragen das obige Ergebnis erhalten,
ich wollte dich nich länger mit dem Thema beschäftigen, sei bitte deswegen nicht sauer, ich schätze sehr Deine Arbeit hier, wie Du und auch alle anderen uns Anfängern hilfst
 
Ich bin nicht sauer, warum auch.

Beschreibe mal was passiert wenn du alles zusammen packst und wenn du den Code hast wo alles zusammen ist, stell diesen auch mal hier rein.

Du bist sicher auch nicht sauer wenn ich mich für heute abmelde, verspreche aber das ich morgen früh gleich wieder rein schaue.

Also bis dahin, noch einen schönen Abend.
 
Hallo tombe,
ich habe heute auch keine Zeit mehr und morgen muß ich für ca. 3 Tage nach Prag fahren, wenn ich in der zwischenzeit es einstellen kann, werde ich das tun,
da ich es nur aus Interesse mache und "Got sei Dank" nicht mein Geld damit verdienen muß (Hungertuch) habe ich kein Problem damit auch mal ein paar Tage auf Antwort zu warten,
Sauer bin ich gewiss nicht, ich hatte nur ein sch.... Gefühl Dir gegenüber. Es wäre besser gewesen, wenn ich gleich gesagt hätte, hab keine Zeit momentan, teste es später wäre sicherlich der bessere Weg gewesen.
Nochmals Danke für Deine Hilfe,
schönen Abend
Gruß
Rainer
 
Einen schönen guten Morgen.

So und hier wie versprochen die Lösung für dein Problem (hoffe ich zumindest).

Javascript:
<script type="text/javascript">
function chkFormular () {
error = 0;
if (document.Formular.land.value == "") {
	alert("Bitte Land eingeben!");
    document.Formular.land.focus();
    error = 1;
}

if (document.Formular.vorname.value == "") {
	alert("Bitte Ihren Vornamen eingeben!");
    document.Formular.vorname.focus();
    error = 1;
}

if (document.Formular.familienname.value == "") {
    alert("Bitte Ihren Familiennamen eingeben!");
    document.Formular.familienname.focus();
    error = 1;
}

if (error == 1) {
	return false;
}

}

function chkCheckbox(id) {
anzahl = 0;

for (a = 0; a < document.getElementsByName("tage").length; a++) {
	if (document.getElementsByName("tage")[a].checked == true) {
		anzahl = anzahl + 1;
	}
}

if (anzahl == 7) {
	alert("Es dürfen nicht alle Tage ausgewählt werden.");
	document.getElementById(id).checked = false;
}

}
</script>

HTML:
<form name="Formular"  action="Eingabe-Resbar.php" method="post" onsubmit="return chkFormular()">
    <label for="land">Land: *</label>
    <br />
    <select name="land" id="land"  size="1" >
        <option value="">Bitte Land ausw&auml;hlen</option>
        <option value="Deutschland">Deutschland</option>
    	<option value="Italien">Italien</option>
    	<option value="Frankreich">Frankreich</option>
    </select>
    <br />
    <label for="vorname">Vorname: *</label>
    <br />
    <input name="vorname" id="vorname" type="text" size="40" maxlength="40" />
    <br />
    <label for="familienname">Familienname: *</label>
    <br />
    <input name="familienname" id="familienname" type="text" size="40" maxlength="40" />
    <br />
    <label for="montag">Mo.</label>
    <input name="tage" type="checkbox" id="montag" value="Montag" onclick="chkCheckbox(this.id)" />

    <label for="dienstag">Di.</label>
    <input name="tage" type="checkbox" id="dienstag" value="Dienstag" onclick="chkCheckbox(this.id)" />

    <label for="mittwoch">Mi.</label>
    <input name="tage" type="checkbox" id="mittwoch" value="Mittwoch" onclick="chkCheckbox(this.id)" />

    <label for="donnerstag">Do.</label>
    <input name="tage" type="checkbox"  id="donnerstag" value="Donnerstag" onclick="chkCheckbox(this.id)" />

    <label for="freitag">Fr.</label>
    <input name="tage" type="checkbox"  id="freitag" value="Freitag" onclick="chkCheckbox(this.id)" />

    <label for="samstag">Sa.</label>
    <input name="tage" type="checkbox"  id="samstag" value="Samstag" onclick="chkCheckbox(this.id)" />

    <label for="sonntag">So.</label>
    <input name="tage" type="checkbox"  id="sonntag" value="Sonntag" onclick="chkCheckbox(this.id)" />
    <br />
    <input type="submit" name="submit" value="Abschicken" />
</form>

Es gibt jetzt 2 verschiedene Funktionen:

Die Funktion "chkCheckbox" wird beim Anklicken ausgeführt und prüft wie viele markiert wurden. Sind es alle, wird die zuletzt markierte Checkbox wieder abgewählt und eine Meldung ausgegeben. Da diese Funktion direkt nach dem Anklicken einer Checkbox ausgeführt wird kann es auch nicht passieren das alle Tage markiert sind und das Formular trotzdem abgeschickt wird.

Die Funktion "chkFormular" wird ausgeführt bevor das Formular wirklich abgeschickt wird und prüft die Eingaben in den Textfeldern bzw. die Auswahl in der Liste.

Ich habe mir erlaubt auch gleich ein paar andere Fehler zu beheben (HTML) und den Aufbau habe ich auch ein bisschen geändert. Vergleiche einfach mal dieses Beispiel mit den was du hattest, dann werden dir die Unterschiede auffallen.


So und jetzt viel Spaß in Prag!

Viele Grüße Thomas
 
Hallo Thomas,
Prag ging schneller als gedacht,
Danke das du so schnell geandwortet hast, aber den Stress hättest du dir nicht machen müsse, freut mich trotzdem.
So habe dein Skript in meine Seite eingebaut und es funktioniert.
Ich habe die Sache noch etwas erweitert, weil ich möchte, dass bevor das Formular gesendet wird, noch einmal ein Fenster öffnet, um zu Bestätigen. Das macht es auch.

Allerdings mit Schönheitsfehler.
Wenn nicht alles ausgefüllt wurde und der button Senden gedrückt wird, kommt zuerst das Fenster "Senden ja nein" und mit Bestätigung ja erscheinen die Fehlermeldungen. (wird also nicht gesendet)

habe anstatt "onClick="confirm ('jetzt senden')" mal "onClick=chkFormular" versucht, was glaube ich, auch funktioniert, weil man die Fehler erst durch einen 2 Mausklick weiter abfragen kann.

Wo ich jetzt hänge:
(so stelle ich mir es vor)
1. mit onclick sollte das Formular überprüft werden
2. wenn Fehler vorhanden --> Fehlermeldung
wenn alles ok --> submit

Darf ich dich damit nochmals nerven?

Gruß
Rainer
 
Hallo zurück,

lass mal bei onclick die Anweisung so stehen wie sie bisher war und ändere die Funktion chkFormular wie folgt ab (letzte Zeile):

Javascript:
function chkFormular () {
error = 0;
if (document.Formular.land.value == "") {
    alert("Bitte Land eingeben!");
    document.Formular.land.focus();
    error = 1;
}

if (document.Formular.vorname.value == "") {
    alert("Bitte Ihren Vornamen eingeben!");
    document.Formular.vorname.focus();
    error = 1;
}

if (document.Formular.familienname.value == "") {
    alert("Bitte Ihren Familiennamen eingeben!");
    document.Formular.familienname.focus();
    error = 1;
}

if (error == 1) {
    return false;
}

// Die Zeile nach dem Kommentar ist die einzige Änderung die es gibt.
// Es werden zuerst die Felder geprüft. Gibt es einen Fehler wird dieser angezeigt.
// Ist alles Ok kommt die Abfrage und je nachdem was angeklickt wird,
// wird das Formular abgeschickt oder nicht.
return confirm ("Soll das Formular abgeschickt werden?");

}
 
Zurück