explicitOriginalTarget イベント パラメータに相当するクロスブラウザを知っている人はいますか? このパラメーターは Mozilla 固有のもので、ぼかしの原因となった要素を教えてくれます。私のページにテキスト入力とリンクがあるとしましょう。テキスト入力にフォーカスがあります。リンクをクリックすると、テキスト入力のぼかしイベントにより、explicitOriginalTarget パラメーターを介して Firefox にリンク要素が表示されます。
検索フィールドが特定の要素にフォーカスを失ったときに検索結果を非表示にしないように、Autocompleter.Base の onBlur メソッドを拡張しています。デフォルトでは、検索フィールドがいずれかの要素にフォーカスを失うと、onBlur メソッドは非表示になります。
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'] });
ありがとう。