Reihenfolge von Events onblur - onclick
Gast
- javascript
Hallo,
bei der Eingabe in ein Feld lasse ich mir per Ajax Vorschläge geben und zeige die an (display:block)
Die Anzeige muss in zwei Fällen wieder verschwinden (display:none):
1. wenn ich das Eingabefeld verlasse (onblur)
2. wenn ich auf einen Vorschlag klicke (onclick)
Trotz onclick wird aber der Wert nicht übernommen. Sicherlich, weil onblur vorher feuert, die Anzeige ist weg bevor onclick ausgeführt wird.
Wie kann ich das Dilemma beheben?
Gruß, Gast
sehe gerade, wie Google Suche das macht.
Wenn ich dort das Eingabefeld verlasse (woanders hinklicken), bleiben die Vorschläge stehen. Das geht bei mir nicht, denn die Vorschläge decken andere Eingabefelder ab.
so geht es:
onBlur="setTimeout('loescheVorschlaege()',100);"
aber besonders toll finde ich es nicht.
Ich hab zwar noch nicht so viel wissen, aber wie wäre es beim onblur zu testen, ob der Fokus auf einen der Vorschläge wechselt. Wenn nicht, Vorschläge verstecken. Das onlcick der Vorschläge versteckt sie ja dann selbst.
Leider kann ich jetzt keinen Quelltext zeigen, oder einen Link geben (mangels wissen halt), aber das Prinzip sollte hilfreif sein ;)
MfG
bubble
Ich hab zwar noch nicht so viel wissen, aber wie wäre es beim onblur zu testen, ob der Fokus auf einen der Vorschläge wechselt. Wenn nicht, Vorschläge verstecken. Das onlcick der Vorschläge versteckt sie ja dann selbst.
Gute Idee, habe ich ausprobiert.
Aber http://de.selfhtml.org/javascript/objekte/elements.htm#focus@title=focus() ist leider nicht anwendbar auf ein div, darin sind die Vorschläge nämlich.
Habe das div durch textarea ersetzt. Eignet sich zwar für focus(), geht aber auch nicht, denn in textarea können die gezeigten Werte keine Attribute haben. Wenn ich auf einen Wert klicke, soll der ja in das Feld übernommen werden.
Gast
Hi,
Aber http://de.selfhtml.org/javascript/objekte/elements.htm#focus@title=focus() ist leider nicht anwendbar auf ein div
Wenn das div ein tabindex-Attribut mit entsprechendem Wert hat, dann schon.
Eine Liste an Vorschlägen sollte aber wohl sowieso eher ein ul-/ol- mit li-Elementen sein.
Auch diese Elemente bräuchten allerdings ein tabindex-Attribut um fokussierbar zu sein.
~dave
Hi,
onBlur="setTimeout('loescheVorschlaege()',100);"
Wenn dann müsste das Attribute "onblur" geschrieben werden, "onBlur" sollte unbekannt sein.
Besser wäre es aber IMHO Eventhandler mit Javascript zu registrieren:
document.getElementById('Id-deines-elements').addEventListener('blur', function () {
// whatever
});
Es ist schöner und weniger Fehleranfällig an setTimeout als ersten Parameter keinen String sondern eine Funktionsreferenz zu übergeben:
setTimeout(loescheVorschlaege, 100);
~dave
[latex]Mae govannen![/latex]
Hi,
onBlur="setTimeout('loescheVorschlaege()',100);"
Wenn dann müsste das Attribute "onblur" geschrieben werden, "onBlur" sollte unbekannt sein.
Im Kontext Javascript ja, im hier gegebenen Kontext HTML (anhand der Syntaxauszeichnung) nicht in jedem Fall. Prinzipiell kann ich bei nict XML-basierten HTML-Dialekten auch oNbLuR schreiben. Ob es sinnvoll ist, eine andere Schreibweise als "durchgehend klein" zu wählen, bezweifele ich jedoch. Bei CamelCase ist die Versuchung einfach zu groß, sie dann auch (unbewußt) im Kontext Javascript zu verwenden.
Besser wäre es aber IMHO Eventhandler mit Javascript zu registrieren:
document.getElementById('Id-deines-elements').addEventListener('blur', function () {
// whatever
});
Es sei noch erwähnt, daß dies in älteren Internet Explorern nicht funktioniert und einen Fehler wirft.
Das Archiv und das Netz sollten eine Vielzahl Lösungen bieten (Suchbegriff bspw. addEvent IE)
Stur lächeln und winken, Männer!
Kai
--
It all began when I went on a tour, hoping to find some furniture
Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
[SelfHTML-Forum-Stylesheet](http://selfhtml.knrs.de/#h_stylesheet)
Hi,
- wenn ich auf einen Vorschlag klicke (onclick)
Wenn du anstelle von "onclick" auf "onmousedown" reagierst?
~dave