Kennt jemand Crossbrowser-Äquivalent des explicitOriginalTarget-Ereignisparameters? Dieser Parameter ist Mozilla-spezifisch und gibt mir das Element, das die Unschärfe verursacht hat. Nehmen wir an, ich habe eine Texteingabe und einen Link auf meiner Seite. Texteingabe hat den Fokus. Wenn ich auf den Link klicke, gibt das Blur-Ereignis der Texteingabe mir das Link-Element in Firefox über den Parameter explicitOriginalTarget.Crossbrowser-Entsprechung des explicitOriginalTarget-Ereignisparameters
Ich erweitere die onBlur-Methode von Autocompleter.Base, um die Suchergebnisse nicht zu verbergen, wenn das Suchfeld den Fokus auf bestimmte Elemente verliert. Standardmäßig blendet die onBlur-Methode aus, wenn das Suchfeld den Fokus auf ein beliebiges Element verliert.
Autocompleter.Base.prototype.onBlur = Autocompleter.Base.prototype.onBlur.wrap(
function(origfunc, ev) {
var newTargetElement = (ev.explicitOriginalTarget.nodeType == 3 ? ev.explicitOriginalTarget.parentNode: ev.explicitOriginalTarget); // FIX: This works only in firefox because of event's explicitOriginalTarget property
var callOriginalFunction = true;
for (i = 0; i < obj.options.validEventElements.length; i++) {
if ($(obj.options.validEventElements[i])) {
if (newTargetElement.descendantOf($(obj.options.validEventElements[i])) == true || newTargetElement == $(obj.options.validEventElements[i])) {
callOriginalFunction = false;
break;
}
}
}
if (callOriginalFunction) {
return origFunc(ev);
}
}
);
new Ajax.Autocompleter("search-field", "search-results", 'getresults.php', { validEventElements: ['search-field','result-count'] });
Danke.
Danke Sergey. Vielleicht sollte ich meine eigene Methode mit Ereignisdelegierung schreiben anstatt zu versuchen, die onLur-Methode von AutoCompleter zu erweitern. Mit Ereignisdelegierung und einigen globalen Variablen kann ich das beheben. – matte