我有一个网站加载一次,然后每次用户点击按钮而不是加载新页面时,内容只是通过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,在那里放置那些脚本仍然没有在页面上运行代码= /
答案 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。)
希望这有帮助。