【问题标题】:setTimeOut not working as expected in functionsetTimeOut 在函数中未按预期工作
【发布时间】:2017-11-07 20:40:34
【问题描述】:

由于某种原因,我的函数中的 setTimeOut 变量不起作用。我尝试了几种不同的策略,但都没有奏效。基本上,我试图在音频播放之前设置一个延迟。下面是我的 JS 和 HTML 代码。

function song(musicfile) {
  $('#result').html("<audio autoplay=\"true\"><source src=" + musicfile + " type=\"audio/mpeg\" /></audio>");
  setTimeout(song, 10000);
}
<img class="playbutton1 center-block" src="play.png" onclick="song('pretender.m4a');">

【问题讨论】:

  • 为什么引用song
  • 我删除了引号。不幸的是,它并没有解决问题。
  • 试试这个:setTimeout(function(){ song(musicfile); }, 10000);
  • 您对song 的调用未传递任何参数。此外,如果您试图延迟通话,您的逻辑是错误的。您需要在setTimeout() 调用内部 创建audio 元素,而不是每10 秒递归调用song()

标签: javascript jquery html audio settimeout


【解决方案1】:

当然没有延迟。有人点击图片,你立即注入&lt;audio&gt;元素,然后设置延迟。

你需要的是setTimeout(function_that_injects_the_element, 10000)

function song(musicfile) {
  setTimeout(function() {
    $('#result').html("<audio autoplay=\"true\"><source src=" + musicfile + " type=\"audio/mpeg\" /></audio>");
  }, 10000);
}

我可能会建议同时删除任何现有的音频元素,或者至少在可能的情况下停止它们。

【讨论】:

  • 抱歉,我是 JQuery 新手。感谢您添加一些关于我如何管理代码层次结构的背景。
  • 这是原生 JS 的东西——setTimeout 是内置的。jQuery 所做的只是元素的实际插入。
【解决方案2】:

jquery 调用应该在 setTimeout 内

function song(musicfile) {

  setTimeout(function(){$('#result').html("<audio autoplay=\"true\"><source src=" + musicfile + " type=\"audio/mpeg\" /></audio>");}, 10000);
}

【讨论】:

    猜你喜欢
    • 2020-04-10
    • 1970-01-01
    • 2012-03-10
    • 2013-11-11
    • 2018-02-01
    • 1970-01-01
    • 2019-10-30
    • 2015-04-11
    • 2022-01-25
    相关资源
    最近更新 更多