1

イベントに関連付けられているデフォルトのアクションを実行したくない場合は、

function listener(e){
    if(e.preventDefault) e.preventDefault();
    /* Other code */
}

しかし、イベントにはブール値があることを知りましcancelableた。次に、代わりにこのコードを使用する必要がありますか?

function listener(e){
    if(e.cancelable) e.preventDefault();
    /* Other code */
}

私は疑問に思う:

  • の場合、それevent.preventDefaulttrue本当にイベントがキャンセル可能であることを意味しますか?キャンセルできない場合は、その属性が定義されています(およびtrue)が、関数ではありません。またはそれは関数ですが、私がそれを呼び出すとエラーをスローします。
  • すべてのブラウザ(つまり、私はあなたを見ています)はサポートしていevent.cancelableますか?event.preventDefaultメソッドはあるが持っていないブラウザはありますかevent.cancelable; またはメソッドはありますevent.cancelableが、ありませんevent.preventDefault; または、それが定義されていて、それが関数であり、エラーをスローしないことevent.cancelableを常に意味するわけではありませんか?event.preventDefault
4

2 に答える 2

4

これ:

if (e.preventDefault)

単に、イベントオブジェクトに「preventDefault」というプロパティがあることを意味します。古いバージョンのIEにはそれがなかったので、これはブラウザの機能テストです。代わりに、IEでは、イベントオブジェクトのプロパティ「returnValue」をに設定しますfalse

したがって、「preventDefault」をテストする理由は、その関数が使用可能かどうかを確認するためです。プロパティがnullの場合、明らかに関数呼び出しを行うことはできません。したがって、デフォルトのアクションを防止したい場合、コードは次のようになります。

if (e.preventDefault)
  e.preventDefault();
else
  e.returnValue = false;

「キャンセル可能」フラグがfalseの場合、デフォルトの動作を防ぐことはできません。「preventDefault」関数はまだ存在しますが(通常は存在する場合)、キャンセルできないイベントの場合、この関数の呼び出しは無視されます。実際、フラグをチェックする必要はまったくありません。これは通常、特定のタイプのイベントの静的な特性です。

于 2013-02-13T19:32:34.457 に答える
0

まず、イベントがキャンセル可能かどうかを確認できます。イベントなど、すべてのイベントをキャンセルできるわけではないことに注意してchangeください。

その後、イベントがdefaultPreventedであるかどうかを確認します。

if (!event.cancelable || !event.defaultPrevented) {
  // execute the event logic, because the previous event didn't prevented it
}

チェックはオプションですが、cancelableすべてのイベントがキャンセルできるわけではないことを思い出させるために使用します。

于 2022-02-09T15:12:32.453 に答える