【发布时间】:2018-05-10 14:42:45
【问题描述】:
我使用下面的代码每秒播放一个音频文件,音频文件是一秒长,基本上是一个滴答声。代码将只运行一次,然后我在控制台中看到错误。我的目的是让它每秒运行一次,直到实现某些目标,然后我才能清除间隔。这是我在控制台中遇到的错误
Uncaught SyntaxError: Unexpected identifier
setInterval (async)
这是我的代码:
$('select[name=notsound]').change(function(){
var h = $(this).val();
var tickAudio = new Audio('https://www.sample.com/sounds/'+h+'');
setInterval(tickAudio.play(),1000);
});
我不确定为什么会发生这种情况,我确信我犯了一些导致这个问题的错误,因为在我考虑给它一种不同的方法之前它已经工作了。感谢您阅读我的查询。 :)
【问题讨论】:
-
您可能需要
setInterval(tickAudio.play, 1000)而不需要额外的(),否则您将每秒调用tickAudio.play()的结果。 -
尝试传递回调但不是结果
setInterval(tickAudio.play,1000); -
当我这样做时,我得到这个错误 Uncaught (in promise) TypeError: Failed to execute 'play' on 'HTMLMediaElement': Illegal invocation
-
setInterval(tickAudio.play(),1000);=>setInterval(tickAudio.play.bind(tickAudio),1000);或setInterval(function() { tickAudio.play(); },1000);,请参阅链接问题的答案了解原因。 -
您正在使用间隔/超时来确保在 play() 之前加载视频,最好将其删除并使用加载事件:$('select[name=notsound]').change(function (){ var h = $(this).val(); var tickAudio = new Audio(); tickAudio.onload = function(){ tickAudio.play(); } tickAudio.src ='sample.com/sounds/'+h+''; } );
标签: javascript jquery setinterval