Zur Navigation

Bowser aufhängen verhindern

1 Peter

Hallo an alle,
in meinen Formular habe ich zwei Felder, bei denen die Eingabewerte überprüft werden. Damit der User auch mit der Entertaste weiterspringen kann habe ich eine Funktion definiert, welche bei nicht "richtige" Werte, eine Fenster öffnet und nach dem schliessen, wieder in das Ausgangsfeld geht.
Diese Funktion wird "onblur" ausgeführt. Leider , wenn der User ohne Eingabe in das erste Feld die Entertaste drückt, kommt es zum "aufgängen der Funktionen".

http://www.windeko.de/php/daten10.php

Funktion "Enter":
<script type="text/javascript"> 
<!-- 
var retab=0; 
document.onkeydown=function(e){ 
txt=document.jalou; 
if(!e)e=window.event; 
code=(e.keyCode)?e.keyCode:e.which; 
el=(e.srcElement)?e.srcElement:e.target; 
if(el.tabIndex){ 
tab=Number(el.tabIndex); 
} 
if(code==13){ 
if(tab==txt.length-1){ 
alert('Bitte Tab statt Enter'); 
} 
else{ 
for (var i=0;i<txt.length;i++){ 
if(Number(txt[i].tabIndex)==(tab+1)){ 
txt[i].focus(); 
} 
} 
} 
retab=1 
return false; 
} 
else retab=0; 
} 
//--> 
</script>

Funktion "checkB und ceckH":
function checkB () {
var B = document.jalou.EinB.value;
if (B >= 400 && B <= 2200)
{
}
else { alert("Die Breite liegt nicht zwischen 400 und 2200 mm!\n Bitte neu eingeben!");
      document.jalou.EinB.focus();
      document.jalou.EinB.value = "";
   }

}
function checkH () {
var H = document.jalou.EinH.value;
if (H >= 400 && H <= 3000)
{
}
else { alert("Die Höhe liegt nicht zwischen 400 und 3000 mm!\n Bitte neu eingeben!");
      document.jalou.EinH.focus();
      document.jalou.EinH.value = "";      
}

Felder:
         <input type="hidden" name="sender" value="daten10.php">
Breite in mm <input type="text"size="5" name="EinB" tabindex="1" onblur="anz(this.value,this.name),checkB()" 
value="<?php
      printf("%s", htmlentities($EinB));
         ?>"/><input type="hidden" name="breite" size="5"
  value="<?php
      printf("%s", htmlentities($breite));
         ?>" readonly /><br>
						<input type="hidden" name="sender" value="daten10.php">
H&ouml;he in mm <input type="text" size="5" name="EinH" tabindex="2" onblur="anz(this.value,this.name),checkH()"
    value="<?php
      printf("%s", htmlentities($EinH));
         ?>"/><input type="hidden" name="hoch" size="5" 
  value="<?php
      printf("%s", htmlentities($hoch));
    ?>" readonly /><br>
						<br>
Wenn ich die beiden Felder "breit" und "hoch" nicht hidden setze, kann sich die Funktion nicht "aufhängen", leider müssen sie besser versteckt bleiben.

Wenn ihr eine Idee habt, wäre ich sehr dankbar.
Viele Grüße
Peter

10.03.2008 19:05

2 Jörg Kruse

Inwiefern hängt sich da etwas auf?

Wenn ich in Opera nichts eingebe und mit der Tab-Taste weiterrücken möchte, erscheint die Fehlermeldung und der Cursor wird wie erwartet zurück ins Eingabefeld gesetzt. Firefox setzt den Cursor allerdings ins nächste Eingabefeld. Ist es das, was du meinst?

10.03.2008 20:25 | geändert: 10.03.2008 20:26

3 Peter

sorry, habe mich wohl fasch ausgedrückt, wenn man mit "Enter" weiter geht. Vielleicht ist es auch nur IE-typisch.

10.03.2008 20:38

4 Jörg Kruse

Ja, im IE springt der Cursor zeitgleich mit dem Öffnen des Alertfensters in das nächste Feld. Bei Bestätigung der Meldung geht das nächste Popup auf, mit der Meldung, dass das zweite Feld falsch ausgefüllt ist und der Cursor springt wieder in das erste Feld etc. :) - bleibt nur, den Browser abzuschießen.

Das Grund-Problem rührt denke ich daher, dass der Cursor wie auch bei Firefox in das andere Feld springt, statt in dasselbe Feld zurück - an der Stelle solltest du die Funktion korrigieren

10.03.2008 20:51

5 Peter

Ich hatte eigendlich gedacht, das die Funktion checkB dies auch mit " document.jalou.EinB.focus(); "so ausführt.
function checkB () {
var B = document.jalou.EinB.value;
if (B >= 400 && B <= 2200)
{
}
else { alert("Die Breite liegt nicht zwischen 400 und 2200 mm!\n Bitte neu eingeben!");
      document.jalou.EinB.focus();
      document.jalou.EinB.value = "";
   }

10.03.2008 20:55 | geändert: 10.03.2008 20:59

6 Jörg Kruse

Ja, bei Opera scheint dies ja auch zu funktionieren

Ich würde mal testweise die Reihenfolge hier ändern:

else { 
document.jalou.EinB.focus();
document.jalou.EinB.value = "";
alert("Die Breite liegt nicht zwischen 400 und 2200 mm!\n Bitte neu eingeben!");
       }

Ändert das was am Verhalten des IE?

10.03.2008 21:03 | geändert: 10.03.2008 21:03

7 Peter

habe es schon mal so versucht:
else { document.jalou.EinB.focus(); 
      alert("Die Breite liegt nicht zwischen 400 und 2200 mm!\n Bitte neu eingeben!");
      document.jalou.EinB.value = "";
   }

Leider ohne Erfolg

10.03.2008 21:04

8 Peter

So auch nicht:
else { document.jalou.EinB.focus(); 
      document.jalou.EinB.value = "";
      alert("Die Breite liegt nicht zwischen 400 und 2200 mm!\n Bitte neu eingeben!");

10.03.2008 21:06

9 Peter

Wenn ich es so mache, wird die min. Breite eingesetzt.
else { alert("Die Breite liegt nicht zwischen 400 und 2200 mm!\n Bitte neu eingeben!");
      document.jalou.EinB.focus();
      document.jalou.EinB.value = "400";
}

Kann man das so stehen lassen?

10.03.2008 21:12

10 Peter

Vielleicht geht es so ungefähr:
function checkB () {
var B = document.jalou.EinB.value;
if (B >= 400 && B <= 2200||=Bitte Breite eingeben)
{
}
else { alert("Die Breite liegt nicht zwischen 400 und 2200 mm!\n Bitte neu eingeben!");
      document.jalou.EinB.focus();
      document.jalou.EinB.value = "Bitte Breite eingeben";
}

10.03.2008 21:20