Problem mit onfocus im Zusammenspiel mit alert im Firefox
derletztekick
- javascript
Hi,
für ein Spiel habe ich eine Echtzeitprüfung erstellt. Diese soll starten, wenn sich ein Wert in einem Textfeld ändert. Es wird also beim Event eine Funktion aufgerufen, die true oder false liefert. Ist die Rückgabe wahr, so wird eine alert-Box ausgegeben und das Spiel ist beendet.
Ein Beispiel zum verdeutlichen:
<script type="text/javascript">
window.onload = function(){
var message = "Bing";
Input = document.getElementsByName("test")[0];
Input.onclick = function() { if (isSolved(this)) { alert(message); }; };
Input.onfocus = function() { if (isSolved(this)) { alert(message); }; };
Input.onchange = function() { if (isSolved(this)) { alert(message); }; };
Input.onkeydown = function() { if (isSolved(this)) { alert(message); }; };
Input.onkeyup = function() { if (isSolved(this)) { alert(message); }; };
};
function isSolved() {
return true;
}
</script>
Es existiert ein Eingabefeld <input type="text" value="" name="test" />
. Wenn man nun ins Feld klickt, wird die alert-Box angezeigt. Das passiert ein paar mal, je nachdem, welche Events greifen...
Problem ist onfocus. Dieser liefert in der Konsole folgendes:
Fehler: [Exception... "'Die Erlaubnis für das Setzen der Eigenschaft XULElement.selectedIndex wurde verweigert' when calling method: [nsIAutoCompletePopup::selectedIndex]" nsresult: "0x8057001e (NS_ERROR_XPC_JS_THREW_STRING)" location: "JS frame :: file:///C:/test.html :: anonymous :: line 13" data: no]
Quelldatei: file:///C:/test.html
Zeile: 13
Ein try-catch konnte ich nicht erfolgreich drumlegen und würde auch nicht die Ursache bekämpfen. Was ist also der Grund für diese Meldung? Liegt es daran, dass das Input-Feld durch die Box den Focus wieder verliert? Gibts dafür eine Lösung (außer auf diesen Event zu verzichten)? Das Problem tritt auch auf, wenn nur onfocus als Event ans Object gehangen wird und auf den Rest verzichtet wird!
Schöne Grüße
Micha
Hellihello Micha,
da es mit jeder Funktion diesen Fehler bringt, kann es an dem onfocus nicht liegen. Nur mit onkeyup gehts auch. Auch wenn das Alert durch eine Funktion ausgelagert ist. Und zwar in der Zeile, in der das Alert aufgerufen wird. Schon merkwürdig. Du übergibts bei isSolved übrigens einen Parameter ohne ihn in der Funktion zu nutzen und Dein Testscript ließe sich noch drastisch reduzieren:
window.onload = function(){
Input = document.getElementsByName("test")[0];
Input.onkeyup = function() {
isSolved();
}
};
function isSolved() {
alert("ping");
}
gruß,
frankx
Hallo frankx,
da es mit jeder Funktion diesen Fehler bringt, kann es an dem onfocus nicht liegen.
Stimmt, hatte ich nicht weiter getestet, da er auf diese Zeile verwies.
Du übergibts bei isSolved übrigens einen Parameter ohne ihn in der Funktion zu nutzen
Die Komplexität der Funktion und die damit verbundene Sinnhaftigkeit ist Dir nicht aufgefallen? ;-) Ich übergebe das Textfeld, das den/das(?) Event ausgelöst hat, wie Du sehen kannst. Ich hatte es nur vergessen zu löschen.
Dein Testscript ließe sich noch drastisch reduzieren
Darg&Drop mit der Maus oder aus dem Zwischenspeicher mit dem Kontextmenü etwas eintragen wäre nicht dabei, bei Deiner Version.
Da die Funktion aber keinen Sinn hat, sondern nur das Problem verdeutlichen soll, ist eine Optimierung nicht nötig. Gabs nicht einen Browser, der onkeyup nicht kennt?
Danke für den Link. Meine Vermutung mit dem onfocus hatte somit zwangsläufig keinen Erfolg bei der Suche...
Mit freundlichem Gruß
Micha