Я сделал этот фрагмент, где это должно искать, если внутри div есть элемент с классом "card-new-order"
Div с id "comenzi" обновляется каждые 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);
Похоже, вы пытаетесь воспроизвести/приостановить свой аудиоэлемент до завершения метода load()
.
Подумайте о пересмотре кода, чтобы воспроизведение или пауза звука происходили, когда содержимое операции load()
доступно. Вы можете сделать это, используя обратный вызов success
метода load()
:
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 секунд, чтобы ответить и т.д.),
Надеюсь это поможет!