Archivlink: javarea.de Forum > JavaScript > Mal wieder eine Checkbox-Frage
Vollständigen Link anzeigen: javarea.de Forum > JavaScript > Mal wieder eine Checkbox-Frage

Pages: [1]

geschrieben von Newur am 31.05.2005 - 00:36
Hallo,
ich versuche meinem Script verzweifelt beizubringen, sowohl Textfelder als auch auch eine Checkbox zu überprüfen. Bis jetzt sieht das ganze so aus:

HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
var testzeich = /\S.+/;
function weg()
{
if (!pruef(document.forms.rechen.name.value)) {
	alert("Bitte einen Vornamen / Namen oder Firma eingeben");
	return;
	}

if (!pruef(document.forms.rechen.email.value)) {
	alert("Bitte eine E-Mail Adresse eingeben");
	return;
	}

if (!pruef(document.forms.rechen.ort.value)) {
	alert("Bitte eine PLZ und Wohnort eingeben");
	return;
	}

if (!pruef(document.forms.rechen.strasse.value)) {
	alert("Bitte eine Straße und Hausnummer eingeben");
	return;
	}
	

	else
	{
document.rechen.submit();
}
}


function pruef(inhalt)
{


if(!testzeich.exec(inhalt)) return  false; else return true;

}


(Ich verstehe einige Grundlagen davon nicht, da ich das Script nur meinen Wünschen angepasst, nicht selbst geschrieben habe.)

Wie gesagt soll Funktion jetzt noch prüfen ob der User die AGBs gecheckt hat. Trotz langem experementieren ist mir nicht gelungen diese eigentlich einfache Aufgabe zu intergrieren. Die Scripts von der Page haben mir insofern nicht geholfen, dass sie auf

type=submit

aufbauen. Damit funktioniert aber der ganze Rest nicht, ich habe einen Button der über onClick den Submit-Befehl auslöst...

Ich hoffe ihr könnt mir helfen.


Gruß
Newur

geschrieben von Micha am 31.05.2005 - 07:16
Moin

Anbei eine Funktion, die prüft, ob ein Haken in der BOX mit dem Namen "agb" aus dem Form "rechnen" gesetzt ist. Da eine Box nur zwei Zustände annehmen kann (true/false) kannst Du somit auf das Attribut checked zugreifen und fragen, ob es true = gesetzt oder fasle = nicht gesetzt ist - analog kann man das ganze natürlich auch verneinen !true = nicht wahr bzw. !false = nicht falsch...

Du musst also - ich geh' mal davon aus, das auch die Checkbox in dem Form sein soll, lediglich die IF-Bedingung mit in deine Funktion weg() mit aufnehmen...

HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
<script type="text/javascript">
function checkAGB(){
	if (document.forms.rechnen.agb.checked != true){
		alert('Nicht zugestimmt');
	}
}

</script>

</head>
<body>
<form name="rechnen">
<input type="checkbox" name="agb">
<input type="button" name="absenden" onclick="checkAGB();" value="Absenden">
</form>

</body>



Schöne Grüße Micha

geschrieben von weisnix am 31.05.2005 - 08:28
Hallo,

Im Prinzip so wie es hier demonstriert wird. Der Sende-Button wird erst aktiv, wenn bestätigt wird.

http://www.javarea.de/index.php3?op....amp;id=264

Gruß

geschrieben von Newur am 31.05.2005 - 20:26
Ja im Prinzip schon, aber wie gesagt funktionierte das Script nicht nach meinen wünschen, da es den type=submit enthielt.

Danke für deine/eure Hilfe, mit der IF-Bedingung von derletztekick geht es jetzt soweit.

Leider hat sich jetzt ein anderes Problem aufgetan. Ich möchte, dass der Kunde eine Versandart auswählen kann bzw. muss. Vergisst er ein Häckchen zu machen, erscheint ein Fensterchen mit Hinweis (Bitte Versandart wählen oder sowas).

Da die erste Versandart etwas kostet fügt sie der Summe 5€ hinzu (die zweite ist umsonst), in dem Script das ich habe sieht das wie folgend aus:

HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
<tr>
		<td class=schrift_kb align=center colspan="3">
		
		<input type="checkbox" name="post" value="5" onclick="javascript:rech(this.name)">
		1. Variante: Ich möchte es per Post zugeschickt bekommen und zahle 5,- €

		</td>
		</tr>

                <tr>
		<td class=schrift_kb align=center colspan="3">

		<input type="checkbox" name="abholen" value="holen">
		2. Variante: Ich hole es lieber ab.

		</td>
		</tr>


Das klappt soweit noch prima, nur der Befehl zum überprüfen will nicht so recht. Ich dachte

HTML-Quelltext
1: 
2: 
3: 
4: 
if (document.forms.rechen.post.checked && document.forms.rechen.abholen.checked != true){
		alert('Versand');
		return;
		}


sei richtig, aber es geht nicht. Zum besseren Verständnis könnt ihr euch das ganze hier

http://www.tv-waibstadt.de/test/kartenverkauf.php

als (vereinfachtes) Modell anschauen. Der Sende Button soll nicht funktionieren solange KEINE Versandart gewählt wurde (bei 2 Versandarten eigentlich auch nicht, aber das ist nicht so wichtig). Vielleicht kann ja jmd mal nen Blick in den Quellcode werfen und mir helfen.


Gruß
Newur

geschrieben von Micha am 31.05.2005 - 20:39
Zitat
  Original geschrieben von Newur am 31.05.2005 - 20:26
HTML-Quelltext
1: 
onclick="javascript:rech(this.name)"


Das ist nicht korrekt so, besser ist onclick="rech(this.name)" (also ohne javascript)
Zitat
  Original geschrieben von Newur am 31.05.2005 - 20:26
HTML-Quelltext
1: 
2: 
3: 
4: 
if (document.forms.rechen.post.checked && document.forms.rechen.abholen.checked != true){
		alert('Versand');
		return;
		}


Du musst auch fragen, ob es _nicht_ gesetzt ist.
HTML-Quelltext
1: 
if (document.forms.rechen.post.checked != true && document.forms.rechen.abholen.checked != true){


oder statt !=true ==false

Prüfen solltest Du vll auch (oder Radioboxen nehmen), ob nicht beide gesetzt sind...

Micha

geschrieben von Newur am 31.05.2005 - 21:01
Hm das mit den Radioboxen haut glaube ich in sofern nicht hin, als das ich dann beiden den selben Namen geben müsste, (oder?) wodurch ich in der Antwortmail keine Unterscheidung mehr habe, was gewählt wurde.
Müsste es also über das Script prüfen... *hat darauf jetzt ganz wenig Lust*

Aber vielen Dank für deine sehr schnelle und kompetente Hilfe derletztekick, ich wünschte ich würde auch so viel von Javascript verstehen... oder wenigstens ein bisschen was.

Eine Frage, interesse halber hätte ich aber noch - Wenn man erst die 2. Variante als Versandart wählt und dann oben zB Karten, erscheint NaN als Summe. Warum? und kann man das umgehen?
Wenn nicht ist auch okay.


Freudige Grüße dank so toller Hilfe
Newur

geschrieben von Micha am 31.05.2005 - 22:00
Natürlich kann man das umgehen - sollte man auch! NaN steht für Not_A_Number, das heißt, Deine Rechnung hat ein Fehler, es werden bspw. Werte zusammen addiert, die gar keine Zahlen sind!

Einfacher Fall:
var a = 10;
var b = 'ein String';

var c = a+b;
alert (c);

Hier würde ich versuchen, 10 + ein String zu addieren, was nicht gehen kann! Um sowas zu umgehen steht Dir in JavaScript folgende Methode zur Verfügung:
parseInt(); und parseFloat();

damit kannst Du aus einer Zeichenkette (String) versuchen, einen Zahlenwert vom Typ Integer (ganze Zahl: 1,3,6,77,99 usw) oder eine Fließkommazahl (double/float zB 1.2578, 3.14 usw) - musst Du nun abschätzen, ob das und welches der beiden für Dich in Frage kommt.

Eine weitere möglichkeit, um zumindest das NaN zu verhindern ist, das Du nach
if(isNaN) fragst

Bsp:
var a = "Ein TEXT";
if(isNaN(a)){
alert("a ist keine Zahl");
}

oder

var b = 10;
if (!isNaN(b)){
alert ("b ist eine Zahl");
}

Mit dem Ausrufezeichen verneinst Du...

Zu den Radiboxen, denen kannst Du aber eine value Attribut geben, auf das Du zugreifen kannst. Dieses ist unterschiedlich, so dass Du eine mgl. hast, beide zu unterscheiden.
Dann könntest Du einen auch per default aktivieren, und umgehst auch noch das Problem, das keiner gesetzt ist - halte ich für sinnvoller.
Wenns Dich näher interessiert, dann schreib einfach.

Gruß Micha

geschrieben von Newur am 31.05.2005 - 22:53
Das mit parseInt(); und parseFloat(); verstehe ich leider nicht. Mir ist schon rätselhaft warum das Script überhaupt versucht mit diesen Werten, die selbstverständlich keine Zahlen sind, zu rechnen. *seufz*

Auch weiss ich nicht wie mir diese Befehle helfen sollen, die Beispiele auf selfhtml dazu haben mir nicht geholfen. Ich sehe keine Möglichkeit aus den value Angaben (darauf scheint das Script ja zugreifen zu wollen) einen Zahlenwert zu machen. Sinnvoll wäre in diesem Zusammenhang auch nur die Zahl 0, da sich ja durch das annehmen der AGBs nicht der Wert der Summe erhöhen soll.

Wegen den Radioboxes muss ich morgen nochmal schauen, ob oder wie ich über fommailer.com auf die value Angaben zugreifen kann. Hab ich bis jetzt noch nix gesehen, aber auch nicht gesucht.

Falls es dich interessiert wofür ich den ganzen Kram brauche, kannst du gerne mal auf

http://www.tv-waibstadt.de/dm2005/vordruck.php

vorbeischauen. Da habe ich mit einem Freund zusammen die ganzen Code Schnipsel zusammengebastelt.


Gruß
Newur


/edit
Also die Radioboxes machen bei mir einfach Ärger. Einmal ausgewählt addiert das Script 5 zur Summe hinzu, und behält diese auch bei wenn ich eine andere Radiobox auswähle. Noch dazu provoziert ein mehrmaliger Wechsel eine NaN...
Schade hatte gehofft das würde funktionieren

geschrieben von Micha am 31.05.2005 - 23:56
Hi
Okay, vll war es etwas zu schnell - sry

parse bedeutet ja soviel wie "versuche" (einer der mehr englisch kann, möge mich berichtigen)


parseInt
bedeutet dem zu Folge, versuche einen "Int" (=Interger = ganze natürliche Zahl) zu bekommen...

Ein einfaches Bsp.
Wir deklarieren einen String ( = Zeichenkette), in dem (am Anfang) eine Zahl vorkommt.

var a = "3 ist eine Ziffer";

Für unsere weitere "analyse" ist es nun wichtig, das wir lediglich die Zahl aus diesem Sting gwinnen. Da aber ein Sting beliebige Zeuichen enthalten darf, müssen wir JS dazu bewegen, eine Ziffer aus diesen String herauszulösen. Was als mensch hier noch simple erscheinen mag, stellt den Interpreter vor eine "schwirige" Aufgabe, da wir versuchen, aus einem Datentyp einen anderen zu machen - das soll uns aber nicht weiter stören, da
parseInt
genau dafür gedacht ist.

Zurück zum Bsp:
var a = "3 ist eine Ziffer";
var b = parseInt(a);

In der nun deklarierten Variablen b versuchen wir, einen Integer aus dem Sting a zu gewinnen. Dies wird bei unserem gewählten Bsp. auch von erfolg gekrönt sein, da der String a die Ziffer drei enthält.

lassen wir uns b ausgeben, wird uns 3 angezeigt: alert(b);

es ist uns somit gelungen, aus einer beliebigen Zeichenkette, einen bestimmten Datentyp zu bestimmen und herauszunehmen. Warum ist das wichtig? Formulardaten (value="xyz") werden an ein JavaScript _immer_ als Zeichenkette übergeben, um keinen parseError zu erzeugen, da in einer Zeichenkette etwas x-beliebiges stehen kann - demzufolge auch eine Zahl. Steht dort eine Zahl, "weiss" das JS aber nicht, sondern behandelt es zunächst als normale Zeichenkette. Wir wollen aber erreichen, das er es als Zahl ansieht, um berechnungen durchführen zu können, also --> TypUmwandlung.

Das ganze Funktioniert natürlich analog auch für parseFloat();
Halbwegs verständlich?

Kommen wir zu den Radiobutton:

Wie Du hier gut sehen kannst, ist ein value nicht zwingend nötig, da die Elemente, die eine FORMular enthalten kann, als Feld bzw. Array() im DOM hinterlegt sind. Hast Du somit zwei solcher RadioButton mit gleichem Namen, so unterscheiden sie sich in der Reihenfolge, mit der sie im Array() festgelegt sind.
somit bedeutet:
document.Testform.Art[0].checked == true

dass das erstste Feld abgehakt wurde --> Art[0]

Um nun zu prüfen, ob es das andere ist, hast Du zwei möglichkeiten. Zum einen kannst Du diese Abfrage erneut machen mit der einen änderung - Index des Feldes erhöhen:
document.Testform.Art[1].checked == true

oder, wenn es eh nur zwei möglichkeiten gibt, das Script in einen ELSE Zweig zu leiten:

if (document.Testform.Art[0].checked == true){
//Die erste Box ist aktiviert, weitere Anweiungen
}
else {
//Ansonsten(!) = die andere ist aktiviert, mache alternative Anweisungen
}

Du musst das naürlich auf Dein Form mal beziehen (Name und Elemte) aber es definitiv die bessere Lösung.

MfG
Micha


Powered by: JBB v.2.0.4 Copyright ©2000-2006, www.javarea.de.