Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么这些侦听器中的一个适用于媒体API事件,而另一个不适用?_Javascript_Html_Html5 Video - Fatal编程技术网

Javascript 为什么这些侦听器中的一个适用于媒体API事件,而另一个不适用?

Javascript 为什么这些侦听器中的一个适用于媒体API事件,而另一个不适用?,javascript,html,html5-video,Javascript,Html,Html5 Video,我正在为媒体API事件添加侦听器,如下所示: function addPlayListener() { var video = document.getElementById("theVideo"); video.addEventListener('play', function() {alert('play');}, false); // method a video.addEventListener('play', alert('play'), false); // me

我正在为媒体API事件添加侦听器,如下所示:

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> 
function addplayliner(){
var video=document.getElementById(“theVideo”);
video.addEventListener('play',function(){alert('play');},false);//方法a
video.addEventListener('play',alert('play'),false);//方法b
}
window.addEventListener('load',addPlayEner,false);
使用方法a,一切正常,但是使用方法b,页面加载后会立即显示警报(并且在事件触发时不会显示)


为什么会这样,方法b的语法是否有问题?

的第二个参数必须是“当指定类型的事件发生时接收通知的对象。这必须是实现EventListener接口的对象,或者只是一个JavaScript函数。”警报会立即触发,因为它不在函数中,也不是实现EventListener接口的对象。方法A是普遍接受的语法。

方法b
中,对话框会立即显示,因为您首先调用它--
警报(“播放”)
addEventListener
无法延迟其参数的执行,而是将
警报
返回值传递给它--它无法处理该值:

// what's being passed after `alert('play')` is called
video.addEventListener('play', true, false);
方法a中的
函数(){…}
正是延迟调用
警报('play')
直到触发事件所需的。a函数本身被传递到
addEventListener
,并且可以在以后调用任意次数(即使用事件的每个触发器)。并且,在每次调用中,它将依次执行其内容。

根据文档:

 target.addEventListener(type, listener[, useCapture]);
侦听器必须是:

  • 对象,实现
    EventListener
    接口
  • JavaScript函数
alert()
函数不返回实现
EventListener
接口的任何对象,也不返回Javascript
函数
。简单地说,
alert
不会返回任何内容。所以,你得到的是:

  video.addEventListener('play',  undefined , false);   //method b