イベントのデフォルトが/防止されていない場合にのみ機能を実行します
-
28-09-2019 - |
質問
event.preventdefault()がイベントで呼び出された場合にのみ関数を実行する方法はありますか(別の不明な関数によって)。これはjQueryプラグイン用であるため、ページの他の部分が何をしているのかについての知識はありません。私はこれを試しました:
Event.test = Event.preventDefault;
Event.preventDefault = function () {
alert('Success');
this.test();
}
しかし、それは機能しません...エラーはありませんが、通常のように動作します。
逆に、私も反対のことを望んでいます... event.preventdefault()が呼び出されない場合にのみ、関数を呼び出します。実際には、イベントのデフォルトアクションに関数を追加します。何か案は?これはすべて可能ですか?
編集:コメントに基づいて、最初の問題の解決策があります。 http://jsfiddle.net/nathan/vaepb/9/. 。 Chromeで動作します(アラート function preventDefault() { [native code] }
, 、しかし、つまりアラート undefined
. 。したがって、IEはevent.prototype.testを定義させませんが、event.prototype.preventdefaultを再定義させてくれます。変。 IEで動作させることができれば、これに基づいて2番目の問題の解決策を考え出すことができると確信しています。
解決
最初の問題については、次のようなことを試してみてください。
oldPreventDefault = Event.prototype.preventDefault;
Event.prototype.preventDefault = function() {
//do stuff
oldPreventDefault.call(this);
}
それがうまくいくかどうかはわかりませんが、それはショットの価値があるかもしれません。
2番目の問題については、ライブイベント処理に似たようなことを試みます。親要素にリスナーを置きます(つまり、 body
またはトップレベル div
)。あなたがあなたのフックを入れることができるなら preventDefault
前に述べたように、それを使用してフラグを設定できます。イベントがその要素まで泡立ち、フラグが設定されていない場合は、拡張された動作を行います。ただし、すべてのイベントがバブルではないため、これはすべてのイベントでは機能しません。この問題に取り組む別の方法は、現在のスタックが使用が終了するまで実行を遅らせることかもしれません setTimeout(0,...)
そして、フラグを確認します。
他のヒント
私が理解しているかどうかわかりません。使用できません event.isDefaultPrevented()
お気に入り これ