【发布时间】:2019-10-15 09:33:27
【问题描述】:
我目前正在尝试将我的 HTML 网页的菜单栏放入一个单独的文件中,而不使用 php。
如何正确设置?
由于我使用的是 CMS(http://www.coast-cms.de,仅限德语),因此无法选择使用 php 文件。因此我需要在没有包含的情况下这样做。通过使用jquery.load,我几乎让它按照我想要的方式工作。
导航栏已正确加载,但在我重新加载之前无法打开其中的下拉菜单,或者在某些页面上根本无法使用。
我怀疑这与加载脚本的顺序有关,但鉴于我对 jQuery 的经验有限,我既不知道如何对加载过程进行排序,也不知道哪个顺序是正确的。
<script src="assets/js/jquery-3.4.1.min.js"></script>
<div id="navbar"></div>
<script>
$("#navbar").load( "/modules/navbar.html");
</script>
我希望能够在其他任何事情发生之前将另一个 html 文件粘贴到我现有的文件中,但我的代码似乎在其他时候加载了该文件。
编辑: 我将 jquery.dropotron 用于子菜单 https://github.com/ajlkn/jquery.dropotron
navbar.html
<header id="header">
<h1 id="logo"><a href="index.html">Company Name</a></h1>
<nav id="nav">
<ul>
<li><a href="index.html">Home</a></li>
<li>
<a href="" class="submenu">X</a>
<ul>
<li><a href="a.html">A</a></li>
<li><a href="b.html">B</a></li>
<li><a href="c.html">C</a></li>
<li><a href="d.html">D</a></li>
<li><a href="e.html">E</a></li>
<li><a href="f.html">F</a></li>
</ul>
</li>
<li><a href="ueber_uns.html">Über uns</a></li>
<li><a href="g.html">G</a></li>
<li><a href="h.html">H</a></li>
<li><a href="#FOOTER">Kontakt</a></li>
</ul>
</nav>
</header>
编辑 2: 我认为 main.js 中用于汉堡菜单的代码
a('<a href="#navPanel" class="navPanelToggle"></a>').appendTo(b);
a('<div id="navPanel"><nav>' + a("#nav").navList() + '</nav><a href="#navPanel" class="close"></a></div>').appendTo(d).panel({
delay: 500,
hideOnClick: true,
hideOnSwipe: true,
resetScroll: true,
resetForms: true,
side: "right"
});
【问题讨论】:
-
你能分享
navbar.html代码,或者至少是没有任何个人/公司信息的最小版本吗?在上面显示的代码之后,您是否有任何适用于#navbar的 JS?有问题的下拉菜单是简单的<select>,没有额外的 JS,还是像 selectmenu 或 Bootstrap 的下拉菜单这样的自定义下拉菜单? -
抱歉,我真的应该马上提供这些信息。现在添加它。我在子菜单中使用 jquery.dropotron。(github.com/ajlkn/jquery.dropotron) 我还在原帖中添加了 navbar.html 代码。
-
包含
dropotron.js并调用$('#nav ul').dropotron()的代码是在navbar.html文件中还是在第一页中.load调用之后的某个位置?如果您执行$('#navbar').load('/modules/navbar.html', function() { $('#nav ul').dropotron(); });之类的操作,这似乎可以缓解问题吗? -
你的建议确实解决了这个问题,但我现在很少得到两个下拉菜单。至于应该调用的位置,我不是 100%,我是 JS 的新手,并且使用我购买的模板。我在 main.js 中找到了以下内容,该文件加载在主页的末尾:
a("#nav > ul").dropotron({ alignment: "right", hideDelay: 400 });这就是您所指的吗? -
我的猜测是,最初,该代码偶尔会在
load()调用以导入 HTML 之后运行,这将使下拉菜单正常工作,但有时会在load()调用完成之前运行 -因此没有找到#nav ul元素,因为它还没有加载。现在,它仍然在之前和之后运行,但我在之前的评论中建议的回调方法总是运行 - 所以它偶尔会在同一个元素上创建两个下拉列表。我不熟悉你们的 CMS;您可以编辑main.js并注释掉dropotron()行,或者该文件不是您可以编辑的吗?
标签: jquery html content-management-system