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)
    只触发
    play回调
    一次,以避免潜在的bug


更新 在演示中,我调用
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。这回答了我的第一个问题。