'已结束'HTML5事件未绑定到绑定后创建的元素上
'Ended' HTML5 event is not binded on elements created after binding
我正在开发一些在线mp3播放列表解决方案,遇到了一些奇怪的问题。我想在所有存在或将来将存在的音频元素上绑定"已结束"事件。该策略是在现有元素播放结束后添加新的音频元素。代码如下:
<!DOCTYPE HTML>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
</head>
<body>
<div id='audio_content'>
<audio class='playable' controls >
<source rel='1' src="/files/1.mp3" type="audio/mpeg"/>
</audio>
</div>
<script type="text/javascript">
$(".playable").on('ended',function(){
var id = $(this).find('source').attr('rel');
$("#audio_content").append("<audio class='playable' controls ><source rel='"+(parseInt(id)+1)+"' src='/files/"+(parseInt(id)+1)+".mp3' type='audio/mpeg'/></audio>");
$("[rel="+(parseInt(id)+1)+"]").closest('audio')[0].play()
});
</script>
</body>
</html>
事实上,事件只绑定在第一个元素上,附加在事件内部的第二个元素没有绑定
试试这个:不要绑定事件,而是尝试更改音频的src,也要将这个脚本封装在document.ready
中
$(document).ready(function(){
$(".playable").on('ended',function(){
var source = $(this).find('source');
var id = $(source).attr('rel');
var newId = parseInt(id)+1;
//update rel and src
$(source).attr('rel',newId);
$(source).attr('src',"/files/"+newId+".mp3");
$(this)[0].load()
$(this)[0].play()
});
});
相关文章:
- 如何在动态创建的节点上绑定函数
- Knockout绑定是膨胀的html(表单元格),如何使用javascript创建绑定或从父元素绑定
- 事件绑定到动态创建的元素
- D3.js如何只创建一个绑定到多个数据项的数据集的元素
- 动态创建的DOM元素上的jQuery事件绑定
- AngularJS -- 创建自定义数据绑定和 ng-repeat
- 如何使用角度两个绑定来动态创建的剑道网格
- 如何让 AngularJS 选取在 JavaScript 中创建的动态绑定
- EmberJS - 在创建对象后添加绑定
- 如何将函数绑定到使用链接函数创建 HTML 的角度指令
- 聚合物 - 将事件绑定到动态创建的元素
- Input.checked创建需要绑定到输入的Dynamic元素
- 在页面重新加载后绑定事件,并仅使用Knockout.js、html和js创建新的html元素
- 创建一个计算值数组,该数组绑定到AngularJS中的其他输入
- 在JavaScript中创建动态绑定
- 使用双向绑定将对象从角度视图动态添加/创建到控制器的数组
- 创建一个模态指令,并将click事件绑定到angular js中
- 如何在SapUi5中手动创建绑定
- 使用模板绑定创建影子 DOM
- KnockoutJS:通过点击绑定创建一个可观察对象