explicitOriginalTargetイベントパラメーターに相当するクロスブラウザー
-
05-07-2019 - |
質問
explicitOriginalTargetイベントパラメータと同等のクロスブラウザを知っていますか?このパラメーターはMozilla固有であり、ぼけの原因となった要素を提供します。ページにテキスト入力とリンクがあるとします。テキスト入力にフォーカスがあります。リンクをクリックすると、テキスト入力のblurイベントにより、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'] });
ありがとう。
解決
Geckoベースのブラウザー以外には、explicitOriginalTargetに相当するものはありません。 Geckoでは、これは内部プロパティであり、アプリケーション開発者(おそらくXBLバインディングライター)によって使用されることは想定されていません。
他のヒント
2015アップデート... Chromeでevent.relatedTargetを使用できます。このような基本的なこと、できれば他のブラウザが従うことを願っています...
IEでのMozillaの.explicitOriginalTargetの大まかな同等物はdocument.activeElementです。大まかな同等とは、状況に応じてDOMノードツリーでわずかに異なるレベルを返す場合があるためですが、それでも有用なツールです。残念ながら、まだGoogle Chromeに相当するものを探しています。
IE srcElement
には、FF explicitOriginalTarget
と同じ要素が含まれていません。これは簡単にわかります。 onClick
アクションのボタンフィールドと onChange
アクションのテキストフィールドがある場合は、テキストフィールドを変更して、カーソルを直接ボタンに移動し、クリックして。その時点で、IEの srcElement
はテキストフィールドになりますが、 explicitOriginalTarget
はボタンフィールドになります。 IEの場合、 event.x
および event.y
プロパティからマウスクリックのx、y座標を取得できます。
残念ながら、Chromeブラウザーは、クリックに対する explicitOriginalTarget
もマウス座標も提供しません。 onChange
イベントが発生した場所を特定するために、自分のデバイスに任せます。これを行うために、 mousemove
および mouseout
イベントを適切に使用すると、マウストラッキングが提供され、 onChange
ハンドラーで検査できます。
Webデザインよりもエクステンションライター向けに設計されているようです...
両方のターゲット(または潜在的なターゲット)のぼかし/フォーカスイベントを監視し、それらの情報を共有します。
正確な実装は、実際には目的に依存する場合があります。
IEの場合、 srcElement
を使用して強制できます。
if( !selectTag.explicitOriginalTarget )
selectTag.explicitOriginalTarget = selectTag.srcElement;