Bin ich Plöd? -> Vergleich numerischer Werte aus Formulafeld
André Mantz
- javascript
0 Cheatah0 André Mantz0 Cheatah
0 Aleksej V.0 André Mantz0 Struppi
Hallo,
ich doktor jetzt schon den ganzen Tag rum, aber irgendwie weiß ich nicht mehr weiter.
Ich habe zwei Formularfelder, in welche numerische Werte eingegeben werden sollen.
Dabi darf der Wert im zweiten Feld niemals kleiner sein als dr im ersten. Also will ich bei jeder Feldänderung prüfen, ob dem so ist, und wenn nicht, dann das jeweils andere Feld anpassen.
So sieht mein Script aus (stark vereinfacht, aber sollte so laufen):
<html>
<head>
<title>Test</title>
<script language="JavaScript">
<!--
function Vergleich1()
{
if (document.testform.feld1.value > document.testform.feld2.value)
{
document.testform.feld2.value = document.testform.feld1.value;
}
}
function Vergleich2()
{
if (document.testform.feld1.value > document.testform.feld2.value)
{
document.testform.feld1.value = document.testform.feld2.value;
}
}
//-->
</script>
</head>
<body>
<form name="testform" action="irgendwas" method="post">
<input type="text" name="feld1" onBlur="JavaScript:Vergleich1()">
<input type="text" name="feld2" onBlur="JavaScript:Vergleich2()">
</form>
</body>
</html>
Manchmal klappts, manchmal nicht. Gebe ich z.B. ins erste Feld 120 und dann ins zweite 20 ein passiert nix. Sollte aber eigentlich.
Ich hoffe mal, mir kann jemand sagen, was ich falsch mache.
Danke.
Gruß, André
Hi,
Ich habe zwei Formularfelder, in welche numerische Werte eingegeben werden sollen.
und woher weiß der Browser bzw. JavaScript, dass die Werte nummerisch sind? Prinzipiell kann _alles_ eingegeben werden - Du musst schon explizit in einen Integer (oder was immer) umwandeln, wenn Du(!) es besser weißt.
<script language="JavaScript">
ERROR: Required attribute "type" missing.
Manchmal klappts, manchmal nicht.
Lass mich raten: Es wird "2" > "10" angesehen, was übrigens auch korrekt ist. "2" hat nämlich einen höheren ASCII-Wert als "1", daher braucht die "0" nicht mehr verglichen zu werden.
Cheatah
Auch Hi,
und erstmal danke für die rasche Antwort.
und woher weiß der Browser bzw. JavaScript, dass die Werte nummerisch sind? Prinzipiell kann _alles_ eingegeben werden - Du musst schon explizit in einen Integer (oder was immer) umwandeln, wenn Du(!) es besser weißt.
Ich hate ja geschrieben, dass es stark vereinfacht ist. Zuvor prüfe ich natürlich, ob auch tatsächlich nur Ziffern übergeben wurden.
Wie wandelt man denn explizit in Integer um? Bin wohl doch zu blöd, weil im SelfHTML hab ich dazu nix gefunden.
<script language="JavaScript">
ERROR: Required attribute "type" missing.
Jo, stimmt ... ändert aber nix an meinem Problem
Lass mich raten: Es wird "2" > "10" angesehen, was übrigens auch korrekt ist. "2" hat nämlich einen höheren ASCII-Wert als "1", daher
braucht die "0" nicht mehr verglichen zu werden.
Stimmt, richtig geraten. Aber schlauer bin ich jetzt auch nicht.
Wie vergleiche ich denn 2 mit 10 so, dass 10 auch größer als 2 ist?
Gruß, André
Hi,
Wie wandelt man denn explizit in Integer um? Bin wohl doch zu blöd, weil im SelfHTML hab ich dazu nix gefunden.
ist logisch einsortiert, aber die Seite übersieht man ganz gerne mal: http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm
<script language="JavaScript">
ERROR: Required attribute "type" missing.
Jo, stimmt ... ändert aber nix an meinem Problem
Nein, aber an anderen.
Cheatah
Hallo,
<html>
<head>
<title>Test</title>
<script type="text/javascript">
function Vergleich1()
{
var feld1,feld2
if (isNaN(document.testform.feld1.value)==false&&isNaN(document.testform.feld2.value)==false) {
feld1 = parseInt(document.testform.feld1.value)
feld2 = parseInt(document.testform.feld2.value)
}
else {
document.write('Sie haben keinen gültige zahl eingegeben. Entweder sind andere Zeichen als Zahlen im Eingabefeld eingegeben worden, oder die zahl übersteigt ein integer volumen');
return
}
if (feld1 > feld2)
// Das problem hatte ich auch mal, so kannst du die eingabe auf eine Zahl prüfen und dann als integer vergleichen.
{
document.testform.feld2.value = document.testform.feld1.value;
}
}
</script>
</head>
<body>
<form name="testform" action="irgendwas" method="post">
<input type="text" name="feld1" onBlur="JavaScript:Vergleich1()">
<input type="text" name="feld2" onBlur="JavaScript:Vergleich2()">
</form>
</body>
</html>
Grüße aus Düsseldorf,
Jo Danke,
das klappt super. Man lernt immer was dazu :-)
Gruß vom Niederrhein!
André
Jo Danke,
das klappt super. Man lernt immer was dazu :-)
Tja, hoffentlich liest du noch mit, den es klappt sicher nicht immer, denn in des sind immer noch Fehler drin.
Variante (funktioniert nicht richtig!)
a.)
<form name="testform" action="irgendwas" method="post">
<input type="text" name="feld1" onBlur="vergleich(this.form)">
<input type="button" name="wert1"><br>
<input type="text" name="feld2" onBlur="vergleich(this.form)">
<input type="button" name="wert2"><br>
</form>
<script>
function vergleich(f)
{
var feld1 = parseInt(f.feld1.value);
var feld2 = parseInt(f.feld2.value);
f.wert1.value = feld1;
f.wert2.value = feld2;
if(!isNaN(feld1) && !isNaN(feld2) &&(feld1 > feld2)) f.feld1.value = f.feld2.value;
}
</script>
Gib jetz mal in das untere Feld "022" ein, du erwartest das das als 22 gewertet wird? tja!
oder gib mal '0x22' ein.
Du musst bei parseInt in so einem Fall immer angeben was für ein Zahlensystem du verwendest:
Also in die beiden Zeilen so ändern:
var feld1 = parseInt(f.feld1.value, 10);
var feld2 = parseInt(f.feld2.value, 10);
Das steht aber so auch in selfHTML.
und in eventhandler gehört kein Label rein auch nicht 'javascript:'
Struppi.