Czy ktoś wie o crossbrowserowym odpowiedniku parametru zdarzenia explicitOriginalTarget? Ten parametr jest specyficzny dla Mozilli i daje mi element, który spowodował rozmycie. Załóżmy, że mam wpis tekstowy i link na mojej stronie. Wprowadzanie tekstu jest aktywne. Jeśli kliknę link, zdarzenie blur wprowadzania tekstu daje mi element linku w Firefoksie poprzez parametr explicitOriginalTarget.Odpowiednik Crossbrowser parametru zdarzenia explicitOriginalTarget
Rozszerzam metodę Autocompleter.Base onBlur, aby nie ukrywać wyników wyszukiwania, gdy pole wyszukiwania utraci fokus na dane elementy. Domyślnie metoda onBlur ukrywa się, jeśli pole wyszukiwania utraci fokus na dowolny element.
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'] });
Dzięki.
Dzięki Sergey. Może powinienem zacząć pisać własną metodę, używając delegacji zdarzeń, zamiast próbować rozszerzyć metodę AutocompleterBur. Dzięki delegowaniu zdarzeń i użyciu niektórych zmiennych globalnych mogę to naprawić. – matte