Ich hatte ein ähnliches Problem mit einer Bildlaufleiste in einem Autovervollständigungs-Dropdown. Da das Dropdown ausgeblendet werden sollte, wenn das Formularelement, an das es angehängt ist, den Fokus verliert, wurde die Beibehaltung des Fokus auf das richtige Element zu einem Problem. Wenn die Bildlaufleiste angeklickt wurde, behielt nur Firefox (10.0) den Fokus auf dem Eingabeelement. IE (8.0), Opera (11.61), Chrome (17.0) und Safari (5.1) entfernten alle den Fokus von der Eingabe, was dazu führte, dass das Dropdown-Element ausgeblendet wurde, und da es ausgeblendet war, wurden keine Klick-Ereignisse für das Dropdown-Element ausgelöst.
Glücklicherweise lässt sich die Fokusverschiebung bei den meisten problematischen Browsern leicht verhindern. Dazu muss die Standardaktion des Browsers abgebrochen werden:
dropdown.onmousedown = function(event) {
// Do stuff
return false;
}
Durch Hinzufügen eines Rückgabewerts zum Event-Handler wurde das Problem in allen Browsern außer dem IE behoben. Dadurch wird die Standardaktion des Browsers abgebrochen, in diesem Fall die Fokusverschiebung. Außerdem bedeutete die Verwendung von "mousedown" anstelle von "click", dass der Event-Handler ausgeführt wurde, bevor das "blur"-Ereignis auf dem Eingabeelement ausgelöst wurde.
Damit blieb nur noch der IE als Problem übrig (keine Überraschung). Es stellte sich heraus, dass es keine Möglichkeit gibt, die Fokusverschiebung im IE aufzuheben. Glücklicherweise ist der IE der einzige Browser, der ein Fokus-Ereignis für das Dropdown auslöst, d. h. der Fokus des Eingabeelements kann mit einem IE-exklusiven Event-Handler wiederhergestellt werden:
dropdown.onfocus = function() {
input.focus();
}
Diese Lösung für den IE ist nicht perfekt, aber da die Fokusverschiebung nicht rückgängig gemacht werden kann, ist dies das Beste, was Sie tun können. Was passiert, ist, dass das Unschärfe-Ereignis auf die Eingabe ausgelöst wird, wodurch das Dropdown ausgeblendet wird, woraufhin der Fokus auf das nun ausgeblendete Dropdown ausgelöst wird, was den Fokus auf die Eingabe wiederherstellt und die Anzeige des Dropdowns auslöst. In meinem Code löst es auch das Wiederauffüllen des Dropdowns aus, was zu einer kurzen Verzögerung und dem Verlust der Auswahl führt, aber wenn der Benutzer scrollen möchte, ist die Auswahl wahrscheinlich sowieso nutzlos, also hielt ich dies für akzeptabel.
Ich hoffe, dies ist hilfreich, auch wenn mein Beispiel etwas anders ist als in der Frage. Von dem, was ich verstanden habe, war die Frage über IE Abfeuern eines blur-Ereignis auf dem Dropdown selbst, anstatt die Schaltfläche, die es geöffnet, die keinen Sinn für mich macht ... Wie meine Verwendung eines Fokus-Ereignishandlers zeigt, sollte ein Klick auf eine Bildlaufleiste den Fokus auf das Element verschieben, zu dem die Bildlaufleiste im IE gehört.
1 Stimmen
Wow! Immer noch keine Antworten? Vielleicht muss ich auf die nächste Version des IE warten.
0 Stimmen
Es wäre hilfreich, wenn Sie mehr Details angeben würden. Was versuchen Sie zu tun? Welches Element löst das Weichzeichnungsereignis aus? Warum ist das ein Problem?
0 Stimmen
Ich habe die Beschreibung bearbeitet, um mehr Informationen zu geben.