创建& lt; audio>元素,然后在单击表格单元格时播放
Create <audio> elements and then play when table cells is clicked
我有一个有许多单元格的HTML表,我想给每个单元格一个类或ID,以便可以播放相应的声音。由于有许多单元格,我想用Javascript+jQuery自动完成这项任务,并有更少杂乱的HTML。
假设我有一个文本为a
的单元格。我想将该单元格的类设置为click_sound_a
,并生成一个ID为sound_a
的<audio>
标签,该标签将播放声音a.mp3
。(我也可以为单元格使用id,但我想我会有一些重复。)
我有以下代码作为5个声音的例子:
<script type="text/Javascript">
// trigger play event on an audio element
function playSound(sound) {
$("#sound_"+sound).get(0).play();
}
$(document).ready(function() {
var sounds = ["a", "i", "u", "e", "o"];
// create HTML5 <audio> elements
for (var i in sounds) {
$("<audio id='sound_"+sounds[i]+"'> <source src='/downloads/sounds/"+sounds[i]+".mp3' type='audio/mpeg'> </audio>").appendTo("#page");
// make columns clickable to play sounds
$(".click_sound_"+sounds[i]).click(function() {
playSound(sounds[i]);
});
} // end for
});
</script>
问题是,当循环结束时,所有单元格都得到最后一个元素的声音,即使它们已经被分配了正确的类。所以在这种情况下,每个细胞都将播放o.mp3
。虫子在哪里?
<script type="text/Javascript">
// trigger play event on an audio element
function playSound(sound) {
return function() {
$("#sound_"+sound).get(0).play();
}
}
$(document).ready(function() {
var sounds = ["a", "i", "u", "e", "o"];
// create HTML5 <audio> elements
for (var i in sounds) {
$("<audio id='sound_"+sounds[i]+"'> <source src='/downloads/sounds/"+sounds[i]+".mp3' type='audio/mpeg'> </audio>").appendTo("#page");
// make columns clickable to play sounds
$(".click_sound_"+sounds[i]).click(playSound(sounds[i]));
} // end for
});
</script>
解释:这是JavaScript的一个典型陷阱。无论何时调用您定义的事件处理程序,它都会查找i
变量的值,该变量最近更新为4。您需要使用闭包将适当的值绑定到事件处理程序。
事实上,这与Crockford的书中的例子几乎相同:
相关文章:
- 如何在单击按钮时显示2行1列的表格
- 若单击按钮,则为表格行上色
- 单击“按钮”而不是单击“表格行”
- 单击每个表格行中的复选框时启用文本框
- 如何使用单击属性和工具提示动态创建表格单元格,该工具提示将超链接到页面
- 单击时将表格单元格从范围更改为输入
- 将单击表格单元格重定向到其中的
- 单击按钮-jQuery/JavaScript时显示表格
- 单击并用CTRL+C复制值时高亮显示html表格单元格
- 在表格中单击表单外的操作
- 在动态表格单元格跨度中单击时更新一个权重值
- 知道单击“确定”时选择了表格的哪个单元格
- 当我单击添加新按钮(WORDPRESS,PHP)时,我需要在表格中隐藏
- 单击表格行和单元格
- 在表格最后一行(链接)中显示菜单,并在单击菜单项时显示模式窗口
- 单击时更改表格行的背景颜色
- 如果用户单击表格行,则显示或隐藏表格行(HTML/JQuery)
- 如何制作整行以及其中的复选框,当我在表格行内单击时单击和取消单击
- 通过单击按钮清除选定的表格单元格
- 如何在按钮单击时显示表格行