Javascript 为什么“$”(';audio';).trigger(play)`会两次触发playHandler,而“$”(';audio';)[0.play()`只触发一次?
我过去认为Javascript 为什么“$”(';audio';).trigger(play)`会两次触发playHandler,而“$”(';audio';)[0.play()`只触发一次?,javascript,jquery,audio,html5-audio,Javascript,Jquery,Audio,Html5 Audio,我过去认为trigger(play)只是启动音频的本机play功能,但今天我注意到这两种方法之间有一点不同。如果在('play',function(){console.log('playing');})上为play注册回调,则如果使用trigger(play),回调将被调用两次,但在使用play()时只调用一次 为什么会出现这种差异 是否可以使trigger(play)只触发play回调一次,以避免潜在的bug 更新 在演示中,我调用trigger('play')和trigger('pa
trigger(play)
只是启动音频的本机play
功能,但今天我注意到这两种方法之间有一点不同。如果在('play',function(){console.log('playing');})上为play
注册回调,则如果使用trigger(play)
,回调将被调用两次,但在使用play()
时只调用一次
- 为什么会出现这种差异
- 是否可以使
只触发trigger(play)
一次,以避免潜在的bugplay回调
更新 在演示中,我调用
trigger('play')
和trigger('pause')
,然后调用play()
和pause()
。结果是
// the following four lines are generated by trigger calls
play
play
pause
pause
// the following two lines are generated by native calls
play
pause
这个演示可以说明我在说什么
此问题可在以下位置重现:
- Chrome版本46.0.2490.86 m
- IE 11.0.9600.18053
- 火狐42.0
trigger('play')
以编程方式触发处理程序,它在音频元素上调度播放事件,一旦剪辑开始播放,播放事件将再次调度,第二次触发处理程序,而$('audio')[0].play()
最初不会触发处理程序,它会触发dom元素的本机播放事件,当它开始播放时,会触发handler@codecowboy请看我的更新。@billyonecan Cool。这回答了我的第一个问题。这个问题没有真正意义。另外,请在问题中提供说明问题的代码,而不仅仅是演示的链接。在您的演示中,有两个调用要播放,这就是文件播放两次的原因。还请指定您正在测试的浏览器。trigger('play')
以编程方式触发处理程序,它在音频元素上调度播放事件,一旦剪辑开始播放,播放事件将再次调度,第二次触发处理程序,而$('audio')[0].play()
最初不会触发处理程序,它会触发dom元素的本机播放事件,当它开始播放时,会触发handler@codecowboy请看我的更新。@billyonecan Cool。这回答了我的第一个问题。