Formularüberprüfung mit focus() hängt sich auf
Roland
- javascript
Hallo Leute,
rufe u. a. folgendes Script im body mit onblur auf.
Sobald im aktuellem Feld (Feld ist mit Text vorbelegt) aber der Inhalt gelöscht wird und man mit "TAB" oder der Mause das Feld verlässt, hängt sich Mozilla, IE und Firefox auf.
function CheckStrasse (Feld) {
if (Feld == "") {
document.forms[0].IFSTRASSE.focus();
document.forms[0].IFSTRASSE.style.backgroundColor = "#FF0000";
return false;
}
if (Feld !="") {
document.forms[0].IFSTRASSE.style.backgroundColor = "#FFFFFF";
return true
}
}
Hat jemande eine Idee,wo ich den Fehler verbaut habe?
Gruß und Danke
Moin!
Wild spekuliert: Wenn Du onblur() verwendest, und darin focus() aufrufst, trittst Du damit nicht gleichzeitig ein blur-event los...?
-- Skeeve
Hallo Skeeve,
entschuldige bitte, aber was ist ein blur-event?
Hört sich zumindes interessant an.
Meine Vermutung geht in die Richtung "Endlos-Schleife", da der FF oder IE im System dann mit 99% läuft.
Gruß und Danke für Deine schnelle Antwort
Roland
Moin!
Hallo Skeeve,
entschuldige bitte, aber was ist ein blur-event?
Das, was den Aufruf von onblur-funktionen initiiert.
Meine Vermutung geht in die Richtung "Endlos-Schleife", da der FF oder IE im System dann mit 99% läuft.
Das wäre dann eine Endlosschleife.
Ein blur event ruft deine Funktion auf. Die macht ein focus() und damit wird gleichzeitig ein anderes element "geblurt". Also entsteht ein neues blur event und Deine Funktion wird aufgerufen.
-- Skeeve
Hi nochmal und danke für Deine Infos.
Wie stelle ich es aber am geschicktesten an, dass ich ein Feld beim verlassen überprüfen kann (ob gefüllt, ob mit Zahlen usw.) und gleichzeit (oder so) der Focus in das falsche Feld gesetz wird.
Gruß und nochmals herzlichen Dank
Roland
Moin!
Hi nochmal und danke für Deine Infos.
Wie stelle ich es aber am geschicktesten an, dass ich ein Feld beim verlassen überprüfen kann
onchange. Wenn sich nichts geändert hat, ist im Normalfall auch nichts zu prüfen, wenn die Daten zuvor okay waren.
-- Skeeve
Hallo, ich bins schon wieder,
onchange scheint für mich nicht so gut geeignet.
Will mal schildern, was ich die ganze Zeit versuche:
Formulareingabe - beim Verlassen - überprüfen (leer, Zahl, usw) - wenn Fehler -> farbig hinterlegen und "falschen Wert" löschen (alles ohne alerts, wenn möglich, da umständlich für Benutzer (Vorgabe!).
Kannst Du mir da bitte noch den ein oder anderen Tipp geben?
Gruß und Danke
Roland
Moin!
onchange scheint für mich nicht so gut geeignet.
Warum nicht?
Formulareingabe - beim Verlassen - überprüfen (leer, Zahl, usw) - wenn Fehler -> farbig hinterlegen und "falschen Wert" löschen (alles ohne alerts, wenn möglich, da umständlich für Benutzer (Vorgabe!).
Das kannst Du doch auch mit onchange.
Okay... Wenn Du ein leeres Feld unverändert verläßt, es aber gefüllt sein sollte, dann bekommst Du da keine (neue) markierung, daß was nicht stimmt.
Andererseits ist das, denke ich, auch nicht dramatisch, wenn Du einen onsubmit handler hast, der alle Felder ebenfalls überprüft.
-- Skeeve
Moin!
So... Ich habe mir jetzt mal eine Beispiel Seite gebastelt.
Was ich ursprünglich vermutet hatte, ist wohl nicht der Fall. Also der Aufruf von focus() löst wohl doch kein blur event aus.
Der Fehler muß also woanders liegen. Läßt sich aber schwer sagen, wenn man keinen Source zur Verfügung hat.
<html>
<head>
<title></title>
<script type="text/javascript">
function blurred(me) {
me.value= "blurred";
me.focus();
return false;
}
function focused(me) {
me.value= "focused";
return false;
}
</script>
</head>
<body>
<form action="">
<input type="text" onblur="blurred(this)" onfocus="focused(this)" value="nix" /><br/>
<input type="text" onblur="blurred(this)" onfocus="focused(this)" value="gar nix" /><br/>
<input type="text" onblur="blurred(this)" onfocus="focused(this)" value="ueberhaupt nix"/><br/>
<input type="text" value="kein handler"/>
</form>
</body>
</html>
-- Skeeve
Moin!
Wie stelle ich es aber am geschicktesten an, dass ich ein Feld beim verlassen überprüfen kann (ob gefüllt, ob mit Zahlen usw.) und gleichzeit (oder so) der Focus in das falsche Feld gesetz wird.
onblur für das Feld, nicht für das gesamte Dokument, nutzen. Und dann selektiv auch nur das eine Feld prüfen, nicht das gesamte Formular.
- Sven Rautenberg
Hallo Sven,
mach ich das denn nicht?
function CheckBezirk (Feld) {
if (Feld == "") {
document.forms[0].IFBEZINSP.style.backgroundColor = "#FF0000";
document.forms[0].IFBEZINSP.focus();
return false;
}
var chkZ = 1;
for (i = 0; i < document.forms[0].IFBEZINSP.value.length; ++i)
if (document.forms[0].IFBEZINSP.value.charAt(i) < "0" ||
document.forms[0].IFBEZINSP.value.charAt(i) > "9")
chkZ = -1;
if (chkZ == -1) {
document.forms[0].IFBEZINSP.value="";
document.forms[0].IFBEZINSP.style.backgroundColor = "#FF0000";
document.forms[0].IFBEZINSP.focus();
return false;
}
if (chkZ == 1) {
document.forms[0].IFBEZINSP.style.backgroundColor = "#FFFFFF";
}
}
Aufruf:
...
<INPUT TYPE="TEXT" NAME="IFBEZINSP" onblur ="CheckBezirk(this.value)" MAXLENGTH="2" SIZE="10" VALUE="$BEZINSP$" ID="IFBEZINSP"></TD>
Gruß und Danke
Roland
Moin!
Da ließe sich noch was optimieren:
function CheckBezirk (Feld) {
if (Feld.value == "") {
Feld.style.backgroundColor = "#FF0000";
Feld.focus();
return false;
}
var chkZ = 1;
for (i = 0; i < Feld.value.length; ++i)
if (Feld.value.charAt(i) < "0" ||
Feld.value.charAt(i) > "9")
chkZ = -1;
if (chkZ == -1) {
Feld.value="";
Feld.style.backgroundColor = "#FF0000";
Feld.focus();
return false;
}
if (chkZ == 1) {
Feld.style.backgroundColor = "#FFFFFF";
}
}
<INPUT TYPE="TEXT" NAME="IFBEZINSP" onchange ="CheckBezirk(this)" MAXLENGTH="2" SIZE="10" VALUE="$BEZINSP$" ID="IFBEZINSP"></TD>
Du übergibst also das input element und mußt es Dir dann nicht in der Funktion ständig über document.forms[0]... "suchen".
-- Skeeve
Moin!
mach ich das denn nicht?
Wenn du schreibst "rufe u. a. folgendes Script im body mit onblur auf." - dann gehe ich davon aus, dass du <body onblur="script"> gemacht hast.
- Sven Rautenberg
Ok, mein Fehler.
Entschuldige bitte.
Aufruf:
<INPUT TYPE="TEXT" NAME="IFBEZINSP" onblur ="CheckBezirk(this)" MAXLENGTH="2" SIZE="10" VALUE="$BEZINSP$" ID="IFBEZINSP"></TD>
Gruß
Roland
Hi,
Meine Vermutung geht in die Richtung "Endlos-Schleife", da der FF oder IE im System dann mit 99% läuft.
bei onfocus im formular-element feuert body onblur.
Gruesse, Joachim
hi,
rufe u. a. folgendes Script im body mit onblur auf.
Sobald im aktuellem Feld (Feld ist mit Text vorbelegt) aber der Inhalt gelöscht wird und man mit "TAB" oder der Mause das Feld verlässt, hängt sich Mozilla, IE und Firefox auf.
Rufe die focus-Methode minimal zeitverzögert auf:
http://forum.de.selfhtml.org/archiv/2006/7/t133147/#m862405
gruß,
wahsaga