HTML 文件的 jQuery .load() 在 Chrome 中不一致

标签 jquery html css google-chrome

我知道我的问题与许多其他问题有点重复,但我还没有找到解决我问题的答案。我试图在多个页面上使用响应式菜单,所以我将它的 HTML 代码放在一个单独的文件中……减去 HTML、HEAD、BODY 标签。我们称它为 menu.html。菜单需要 CSS 和 JS 文件,我在 index.html 中引用了它们。 CSS 在 HEAD 中加载,JS 文件在结束 BODY 标记之前加载。我希望菜单出现的位置:

<div id="topMenu"></div>
<script>$('#topMenu').load('vgg_menu.html');</script>

我将所有文件都放在虚拟服务器上,因此没有在本地运行任何内容。奇怪的是...菜单在 IE8 中工作得很棒。在 Chrome 和 FireFox 中,父菜单项显示并按应有的样式设置,但下拉/子菜单项不起作用。但是......菜单将在我打开开发工具面板后工作。去搞清楚!我刷新页面,菜单不起作用...我打开开发工具面板,菜单起作用了。

正如我所说,我已经尝试了在其他帖子中找到的所有建议。我是否使用“$(document).ready(function()”并不重要。它不起作用。我已经尝试为菜单动态加载 CSS - 没有区别。哦,是的......不Dev Tools 控制台中的错误。如果我在 index.html 页面上直接输入菜单的 HTML,它在所有浏览器中都运行良好,因此 CSS 或 JS 文件中的代码没有任何问题。

有没有人知道为什么我无法让这个 .load() 在 Chrome 中正常工作?非常感谢任何指导。虽然它不会运行,但我已经发布了 my code here .

最佳答案

AJAX 请求,在您的情况下通过 jQuery load(url, complete) function , 是异步的,这意味着在您的 .html 文件中的内容可用于 dom 之前需要一些时间,同时您的脚本继续执行。这就是问题所在。当文档准备好后,您将在将元素添加到 dom 之前调用 adjustMenu。要解决此问题,您只需将 adjustMenu 作为完整的回调函数传递给 .load()。 ajax 请求完成时将调用 complete 回调。

$(document).ready(function() {
    $('#topMenu').load('menu.html', adjustMenu);

    $(".nav li a").each(function() {
        if ($(this).next().length > 0) {
            $(this).addClass("parent");
        };
    });

    $(".toggleMenu").click(function(e) {
        e.preventDefault();
        $(this).toggleClass("active");
        $(".nav").toggle();
    });
});

Updated your demo with these adjustments

PS:很抱歉之前的评论不完整,只是快速浏览了一下您的代码...

关于HTML 文件的 jQuery .load() 在 Chrome 中不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19800561/

相关文章:

javascript - 我可以使用 jQuery 访问不存在或无效的 css 属性吗?

javascript - 使用ajax在 map 上的点击操作上加载不同的div

php - 表行 attr() 问题

javascript - 由于正在加载modernizr,单击时表单未提交

jquery - Bootstrap jquery 如何对齐从 jquery 添加的图像

html - 表格 : Trying to align label and text area elements? 的 margin 基础知识

javascript - Owl Carousel 自定义图像预览分页不起作用

jquery - 使用 jquery 拖放 div

javascript - 在 jsplumb 中定义连接器类型时添加标签时出现问题

javascript - 屏幕上的图像叠加切换按钮