【问题标题】:How to let alert happen only once in a for loop using js?如何让警报在使用js的for循环中只发生一次?
【发布时间】:2022-01-20 21:59:14
【问题描述】:

我正在尝试使用一个按钮来暂停音频元素,该功能除了alert() 功能外工作正常。警报只是弹出并永远停留在网站的顶部。
这是我的 HTML 代码

<button id="threeSecTimer">3s</button>

 <figcaption>Fire</figcaption>
      <audio controls loop>
        <source src="xxx" type="audio/mpeg" />
        Your Browser doesn't support the audio
      </audio>

 <figcaption>Forest</figcaption>
      <audio controls loop>
        <source src="xxx" type="audio/wav" />
        Your Browser doesn't support the audio
      </audio>

这里是js

var threeSecTimer = document.getElementById("threeSecTimer");

var allMusic = document.getElementsByTagName("audio");

  function pause3s(e) {
    setTimeout(function () {
      for (var i = 0; i < allMusic.length; i++) {
        if ((allMusic[i] = e.target)) {
          allMusic[i].pause();
          allMusic[i].currentTime = 0;
          alert("time is up!");
        }
      }
    }, 3000);
  }

threeSecTimer.addEventListener("click", pause3s);```

【问题讨论】:

  • alert 暂停执行直到用户点击它,这是正常行为
  • 并请缩进您的代码,这将有助于(您和其他人)阅读它
  • @Cid 感谢您的建议。将来会缩进我的代码。
  • @Cid 我点击了警报中的确定按钮,警报仍然存在

标签: javascript loops alert


【解决方案1】:

您在 if 条件中错过了 =,请将 (allMusic[i] = e.target) 更改为 (allMusic[i] == e.target)

【讨论】:

  • 感谢您的回答,试过了还是不行
【解决方案2】:

您的条件(allMusic[i] == e.target) 永远不会成立,因为 e.target 的目标是 3s 按钮,而 allMusic[i] 是 audo 控件。那是假设您将单个 = 更改为 ==,否则条件将始终为真,这也不是您想要的,但会导致警报按钮弹出两次,每个音频控件一次。当点击警报时,它应该会消失,至少在我试用你的代码时它对我来说是这样。

也许您可以检查HTML5 check if audio is playing? 来定位正在播放的音频。

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多