JS 手风琴未打开

JS accordions not opening

我有一个网站,上面有一些 JS 手风琴,它们打不开,但是在 codepen 上可以。我查看了 chrome 上的控制台,没有出现任何错误消息。但是,当我在 Firefox 的控制台中查看时,我收到以下错误消息 7 次:

HTTP "Content-Type" of "text/html" is not supported. Load of media resource http://xurbia.tk/alpha/homebeta.html failed. homebeta.html

All candidate resources failed to load. Media load paused. homebeta.html

我不知道这里发生了什么,所以非常感谢您的帮助。

其中一个手风琴的相关代码如下:

<dt>
  <a href="#accordion2" aria-expanded="false" aria-controls="accordion2" class="accordion-title accordionTitle js-accordionTrigger">
    <img src="http://xurbia.tk/alpha/pictures/Play_button_next_stop_music_pause.png" height=40px class="pull-left"/>
    Detox
    <img src="http://xurbia.tk/alpha/pictures/Play_button_next_stop_music_pause.png" height=40px class="pull-right"/></a>
</dt>
<dd class="accordion-content accordionItem is-collapsed" id="accordion2" aria-hidden="true">
  <img src="http://xurbia.tk/alpha/pictures/accordian%20pictures/Detox.PNG" width="100%" height="100%" />
  <audio controls>
    <source src="" type="audio/wav" width="100%">
      Your browser does not support the audio element.
  </audio>
</dd>

完整代码可以在这里找到: http://xurbia.tk/alpha/Whosebug.txt

这是我开始制作手风琴的代码笔: http://codepen.io/shardros/pen/OyJqzj

以下是他们无法使用的网站: http://xurbia.tk/alpha/homebeta.html

您的问题是您的 JS 在页面加载之前正在执行。最好在 <body> 元素末尾插入 JS 到 improve page load speed.

您还可以使用事件在页面加载后触发,如下所示:

window.onload = function(){
    //Page has loaded
}

在实时站点上,您的 JavaScript 是使用 模块模式 编写的...这很好。

此模式使用立即调用的函数表达式 (https://en.wikipedia.org/wiki/Immediately-invoked_function_expression)。

这意味着一旦函数被声明,它就会被调用(并执行)。

因为您在页面的 <head> 部分中有此脚本,所以它会在 DOM 加载之前执行(在实际页面加载之前)。

这意味着您的 JavaScript 试图添加事件侦听器并操作 尚不存在 的元素!

为了解决这个问题,将 <script> 标签移出 <head> 并将其作为最后一个元素 放在 <body> 中标签。

这将产生 JavaScript 被调用的效果 所有必需的元素都已创建之后。

(您的示例在 Codepen 中有效,因为它们在 DOM 加载后执行 JavaScript)