加载Javascript并执行它

时间:2009-09-12 23:59:00

标签: javascript jquery

我有一个网站加载一次,然后每次用户点击按钮而不是加载新页面时,内容只是通过ajax替换。但是在我使用jquery-ui的其中一个页面上,例如,如果我登陆“index.html”然后单击转到该页面,则脚本未加载但如果我直接转到该页面,则脚本会执行正确加载。我试图通过这样做来调整脚本的加载。

    var hash = window.location.hash.substr(1);
    var a = window.location.href.lastIndexOf("dev.html");
    var b = window.location.href.lastIndexOf(".html");
    var l = window.location.href.substring(a,b);

    $(document).bind('ready',function(){

            if((hash == "dev") || ((l == "dev") && (hash != dev)) || (l == hash)){
                //$('#tabs').html("<script type=\"text\/javascript\" src=\"assets\/js\/tabs-ui-init.js\"\/><\/script>");
$.ajax({
           type: "GET",
           url: "assets/js/tabs-ui-init.js",
           dataType: "script"
         });

            }
    });

但是剧本不会加载......我做错了什么?我试图通过$ .getScript()和其他一些方式来加载它,而不是.bind使用.live和绑定加载和卸载但没有成功...加载此站点的方式如下所述:{ {3}}


修改 @Jim Davis: 我认为这正是我需要的,为什么不运行?我将内容的引用作为它将加载的脚本,并且Panel是一个div,在那里放置那些脚本仍然没有在页面上运行代码= /

1 个答案:

答案 0 :(得分:2)

在这方面有两件事情在过去让我感到困惑。

最简单的是,在IE中(至少6个,可能不是8个),有一个奇怪的错误,脚本/样式/链接类型标签必须出现在可显示内容之后(我认为IE需要显示某些东西 - 任何东西 - 来“初始化” “文件模型)。两年前我在一个项目上把头发拉了两天......终于意识到,如果我把样式和脚本标签移到页面底部,一切似乎都有效。

加载内容时,脚本有时永远不会正确初始化 - 但是你可以强制它。我在我的PanelManager abstraction中有一个函数来执行此操作:

    // Load Content
Panel.load = function(Content) {

        // "null" the old (to clear it)
    Panel.innerHTML = null;

        // Load the content
    Panel.innerHTML = Content;

        // Load Scripts
    var AllScripts = Panel.getElementsByTagName("script");
    var AllScriptsCnt = AllScripts.length;
    for (var Cnt = 0; Cnt < AllScriptsCnt; Cnt++){
        var CurScript = document.createElement('script');
        CurScript.type = "text/javascript";
        CurScript.text = AllScripts[Cnt].text;
        Panel.appendChild(CurScript);
    };

};

查看“加载脚本”部分 - 它会扫描新内容中的“脚本”标记,然后强制创建具有相同内容的脚本元素 - 对我来说是一种享受。 (请注意,在此上下文中,“Panel”只是对元素的引用 - 通常是包含新内容的DIV。)

希望这有帮助。