在单击功能上,我可以选择播放音频。

单击仅触发一次(在我添加了.off()之后,我似乎必须为每个click事件执行一次,因为我认为我从根本上不了解javascript的工作原理),但是添加到“结束”监听器的函数显示了它触发了单击按钮的次数。我认为.play()也被多次触发。

这些需要在click事件中才能获取ID,因此在使用js时,如何在这里和其他地方阻止此类事情的发生?到处添加event.stopPropagation()event.bubbles = false.off()似乎是不必要的(在这种情况下,也没有任何区别)。

$('.button').off().on('click', function(event){
    event.stopPropagation();
    event.bubbles = false;
    var id = $(this).attr('id')
    if ($(this).hasClass('hasAudio')) {
        document.getElementById('audio_'+id).play();
        document.getElementById('audio_'+id).addEventListener("ended", function(){
            console.log("ended");
        });
    }
});

最佳答案

ended事件移到click事件之外,每次单击按钮时都在注册该事件

$('.button').on('click', function(event){
    var id = $(this).attr('id')
    if ($(this).hasClass('hasAudio')) {
        document.getElementById('audio_'+id).play();

    }
});
$('[id^="audio_"]').on("ended", function(){
    console.log("ended");
 });

10-04 22:41
查看更多