Hallo,
stehe vor folgender Kuriosität und kann es mir nicht erklären:
Gegeben seien einige Formularfelder, darunter ein Input-Feld type=text und ein Button der eine Funktion aufruft.
Nehmen wir mal an besagte Text-Eingabe ist erforderlich, andere Felder optional. Die Text-Eingabe soll gleich geprüft werden (z.B.: weil andere optionale Felder davon abhängig seien). Wenn kein optinales Feld mehr verwendet wird, kann auch gleich auf den Button ("mach was") geklickt werden.
Ich habe dazu unten eine Funktionsfähige Test-Datei angehängt.
So, nun zum kuriosen und für mich nicht nachvollziehbaren Teil:
Im angehängten Beispiel führt Firefox (1.5.x, andere Versionen habe ich noch nicht getestet) bei einem Klick auf den Button direkt nach dem ausfüllen der Eingabe beide Funktionen aus (onblur -> valInp(), onclick -> machWas()) und es wird in der Folge zweimal valInp() aufgerufen.
So weit kann ich es nachvollziehen, aber jetzt kommts: das Ergebnis wird unterschiedlich (und zwar bei der Auswertung von test(), wenn unerwüschte Zeichen vorkamen (z.B.: die Eingabe ",test" war)).
Kann mir dieses Verhalten jemand erklären, oder ist das ein Bug?
(Lassen wir andere Browser mal dahingestellt, aber nur als Bsp.: IE führt valInp() nur einmal aus und liefert dabei ein korrektes Ergebnis zu test() und damit auch insgesamt.)
Vielen Dank für Eure Hilfe und viele Grüße
Michi
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhmtl1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Testdatei</title>
<script type="text/javascript">
function valInp() {
var uz; // unerwünschte Zeichen
var regEx = /[^a-zA-Z0-9\-\_]/gi; // RegExp lässt nur Buchstaben, Ziffern, - und _ zu
var inp = document.getElementById("inp").value;
if (inp == "") {
alert("Bitte geben Sie etwas ein.");
return false;
}
else {
uz = regEx.test(inp);
alert ("input war = " + inp + " und uz = " + uz);
if (uz) {
alert(inp + " enthält unerwünschten Zeichen");
return false;
}
else {
document.getElementById("inpIst").innerHTML = inp + " enthält keine unerwünschten Zeichen";
return true;
}
}
}
function machWas() {
if(valInp()) {
// Input war OK, jetzt mach was
alert("OK");
}
else {
alert("nicht OK");
return false;
}
}
</script>
</head>
<body>
<p>Eingabe:<br />
<input type="text" onblur="valInp()" id="inp" />
</p>
<hr />
<p>Hier könnten noch mehr Formularelemente sein und dann kommt ein Button...</p>
<hr />
<input type="submit" onclick="machWas()" value="Klick mich" />
<hr />
<div id="inpIst"></div>
</body>
</html>