Knockout绑定audio的pause事件致使音频没法中止

...时间过得真快, 一晃4天已通过去了, 然而本身并无动笔写什么. 自省.html

看了看今天的工做, 感受好像没什么可写的. 不由在想是否是一天一篇有点儿难. 再一想, 这分明就是在给本身找理由. 就是再短也应该把当天学到的任何东西整理一下, 怎么都是有的写的! 若是彻底没得写, 那我却是要反思下我今天是否是太虚度了.dom

废话很少说, 整理下这两天的收获. (最近一直写code可是不多记录, 提醒本身之后坚持记录!)spa


我发现我用knockout给audio元素绑定了pause事件, 形如<audio data-bind="event: { pause: pauseHandler }"...可是用$('audio').trigger('pause')没法暂停audio播放. 很诡异.code

因而我为audioplaypause事件都绑上了console.log, 发现trigger('play')会输出两次playtrigger('pause')只会输出一个pause. 可是若是用.play().pause()就能够正常地播放和中止音频, 同时只会输出一个playpause.htm

为何$('audio').trigger('play')会出发playHandler两次而$('audio')[0].play()只会触发一次?

搜索一阵无果就在stackoverflow上问了一下, 获得的解答是:事件

trigger('play') triggers your handler programmatically, which dispatches the play event on the audio element, once the clip starts playing, the play event is dispatched again, triggering your handler a second time, whereas $('audio')[0].play() won't trigger your handler initially, it'll trigger the dom element's native play event, which, when it starts playing will trigger your handlerip

可是至于可否用trigger('play')只触发一次playHandler, 并无获得答复.element

为何用Knockout绑定pause事件后没法用trigger('pause')暂停音频?

本身摸索出来了答案, 只要给pauseHandler加上return true;便可. 可是不明白为何必需要这么加, 因而问了一记, 本身才发现spec上写得清清楚楚:get

By default, Knockout will prevent the event from taking any default action....However, if you do want to let the default action proceed, just return true from your event handler function.it

相关文章
相关标签/搜索