我制作了此代码段,该代码段应在div中搜索是否存在类为“ card-new-order”的元素
id为“ comenzi”的div每5秒刷新一次,并更新其中的卡片及其类别。
如果找到具有类别的卡,则在脚本无法找到该元素之前播放声音。
这是我的代码,但是以某种方式无法正常工作。
var audio = document.getElementById("ring");
setInterval(function(){
$('#comenzi').load(document.URL + ' #comenzi');
$('.contents > .card').each(function(i) {
if($(this).hasClass('card-new-order')){
audio.play();
}else{
audio.pause();
}
});
}, 5000);
答案 0 :(得分:0)
在load()
方法完成之前,您似乎正在尝试播放/暂停音频元素。
请考虑修改代码,以便一旦load()
操作的内容可用时,就会发生音频播放或暂停。您可以通过在load()
方法上使用the success
callback来做到这一点:
var audio = document.getElementById("ring");
function refresh(){
// Pass a success callback function to load() which is run after
// the load has succeeded. Also, remove the whitespace before #comenzi
$('#comenzi').load(document.URL + '#comenzi', function() {
// The loaded content from document.URL#comenzi have loaded and
// can now be accessed
$('.contents > .card').each(function(i) {
if($(this).hasClass('card-new-order')){
audio.play();
} else {
audio.pause();
}
});
// Start the next cycle after the contents have loaded
setTimeout(refresh, 5000)
});
}
// Start the refresh cycle
refresh();
上面显示的另一个建议是使用setTimeout
而不是setInterval
以确保在从load()
加载内容之后进行下一次刷新。基于setInterval
的方法冒着立即执行对refresh()的调用的风险(如果服务器将内容返回到#comenzi
的时间超过5秒才能响应,等等)
希望这会有所帮助!