Javascript 为什么这些侦听器中的一个适用于媒体API事件,而另一个不适用?
我正在为媒体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
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