0

次のように、MediaAPIイベントのリスナーを追加しています。

function addPlayListener() {
    var video = document.getElementById("theVideo");
    video.addEventListener('play',  function() {alert('play');}, false); // method a
video.addEventListener('play',  alert('play'), false); // method b
}
window.addEventListener('load', addPlayListener, false);


<video id="theVideo" controls width="180" height="160" src="sample_mpeg4.mp4"> </video> 

メソッドaを使用すると、すべてが期待どおりに機能しますが、メソッドbを使用すると、ページが読み込まれるとすぐにアラートが表示されます(イベントが発生したときには表示されません)。

これはなぜですか、メソッドbの構文に問題がありますか?

4

3 に答える 3

0

addEventListenerの2番目の引数は、「指定されたタイプのイベントが発生したときに通知を受け取るオブジェクトです。これは、EventListenerインターフェースを実装するオブジェクト、または単にJavaScript関数である必要があります」である必要があります。「メソッドb」では、アラートは関数内になく、EventListenerインターフェースを実装するオブジェクトでもないため、すぐにトリガーされます。メソッドAは、一般的に受け入れられている構文です。

于 2012-05-15T17:05:55.557 に答える
0

ではmethod b、最初に呼び出しているため、ダイアログがすぐに表示されます- alert('play')addEventListener引数の実行を遅らせることはできず、代わりにalertreturn値が渡されます。これは、次の処理ではあまり実行できません。

// what's being passed after `alert('play')` is called
video.addEventListener('play', true, false);

function () { ... }inは、イベントがトリガーされるまでmethod a呼び出しを遅らせるために必要なものです。alert('play')関数自体はに渡されてaddEventListenerおり、後で何度でも呼び出すことができます(つまり、イベントのトリガーごとに)。そして、呼び出しごとに、その内容を順番に実行します。

于 2012-05-15T17:07:04.653 に答える
0

addEvenListenerのドキュメントによると:

 target.addEventListener(type, listener[, useCapture]);

listenerでなければなりません:

  • オブジェクト、EventListenerインターフェースの実装、
  • JavaScript関数

alert()EventListener関数は、インターフェースやJavascriptを実装するオブジェクトを返しませんfunction。単純に、alert何も返しません。だから、あなたが得るものは次のとおりです:

  video.addEventListener('play',  undefined , false);   //method b
于 2012-05-15T17:07:07.497 に答える