4

イベントで呼び出された場合にのみ関数を実行する方法はありますか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] }ですが、IEアラートundefined。したがって、IEでは定義できませんEvent.prototype.testが、再定義Event.prototype.preventDefaultできます。奇妙です。これに基づいて2番目の問題の解決策を考え出すことができると確信していますIEで動作させることができます。

4

2 に答える 2

3

よくわかりません。こんなevent.isDefaultPrevented()風に使えない

于 2010-11-30T12:38:00.287 に答える
0

最初の問題については、次のようにしてみてください。

oldPreventDefault = Event.prototype.preventDefault;
Event.prototype.preventDefault = function() {
    //do stuff
    oldPreventDefault.call(this);
}

それがうまくいくかどうかはわかりませんが、試してみる価値はあります。

2 番目の問題については、ライブ イベントの処理に似た方法を試してみます。親要素 (つまりbody、最上位のdiv) にリスナーを置きます。前述のようにフックを取得できる場合はpreventDefault、それを使用してフラグを設定できます。イベントがその要素にバブルアップし、フラグが設定されていない場合は、拡張動作を実行します。ただし、すべてのイベントがバブルするわけではないため、これはすべてのイベントで機能するわけではありません。この問題に対処する別の方法は、現在のスタックがsetTimeout(0,...)フラグの使用とチェックを完了するまで実行を遅らせることです。

于 2010-11-27T09:55:58.117 に答える