18

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'] });

ありがとう。

4

6 に答える 6

9

Gecko ベースのブラウザー以外には、explicitOriginalTarget に相当するものはありません。Gecko では、これは内部プロパティであり、アプリケーション開発者 (おそらく XBL バインディング作成者) が使用することは想定されていません。

于 2008-10-07T20:17:34.717 に答える
4

2015 更新... Chrome で event.relatedTarget を使用できます。このような基本的なことは、うまくいけば、他のブラウザが続くでしょう...

于 2015-02-22T21:02:50.007 に答える
3

IE での Mozilla の .explicitOriginalTarget にほぼ相当するのは、document.activeElement です。状況によっては DOM ノード ツリーでわずかに異なるレベルが返されることがあるため、大まかに同等と言いますが、それでも便利なツールです。残念ながら、私はまだ Google Chrome に相当するものを探しています。

于 2010-02-11T18:43:58.247 に答える
3

IEsrcElementには FF と同じ要素が含まれていませんexplicitOriginalTarget。これは簡単にわかります。アクションを含むボタン フィールドとonClickアクションを含むテキスト フィールドがある場合、テキスト フィールドをonChange変更し、カーソルをボタンに直接移動してクリックします。その時点で IEsrcElementはテキスト フィールドになりますexplicitOriginalTargetが、 はボタン フィールドになります。event.xIE の場合、およびevent.yプロパティからマウス クリックの x、y 座標を取得できます。

残念ながら、Chrome ブラウザはexplicitOriginalTarget、クリックの座標もマウス座標も提供しません。onChangeイベントがどこから発生したかを把握するのは、自分のデバイスに任されています。これを行うには、mousemoveとイベントを適切に使用することで、ハンドラーmouseoutで検査できるマウス トラッキングを提供できます。onChange

于 2012-05-05T00:43:12.243 に答える
1

Web デザインよりも拡張機能の作成者向けに設計されているように見えます...

両方のターゲット (または潜在的なターゲット) のぼかし/フォーカス イベントを監視し、それらの情報を共有します。
正確な実装は、実際には目的に依存する場合があります。

于 2008-10-07T19:35:36.363 に答える
0

IE の場合は、 を使用srcElementして、強制的に使用できます。

if( !selectTag.explicitOriginalTarget )
    selectTag.explicitOriginalTarget = selectTag.srcElement;
于 2012-03-07T18:46:48.533 に答える