我有一个基本上具有页眉、页脚和正文视图的 Web 应用程序。我正在使用 history.js 库和 HTML5 pushstate 对网站进行 ajaxifying,但我遇到的问题之一是在将 javascript 插入 DOM 时让嵌入式 javascript 运行。
几乎我所有的 javascript 都包含在 jQuery(function(){ ... }) 中(文档就绪加载器)
有谁知道处理这个问题的好策略?谢谢!
我有一个基本上具有页眉、页脚和正文视图的 Web 应用程序。我正在使用 history.js 库和 HTML5 pushstate 对网站进行 ajaxifying,但我遇到的问题之一是在将 javascript 插入 DOM 时让嵌入式 javascript 运行。
几乎我所有的 javascript 都包含在 jQuery(function(){ ... }) 中(文档就绪加载器)
有谁知道处理这个问题的好策略?谢谢!
如果我理解您,您的“页面”只是您动态加载的 HTML 的容器。在该 HTML 中,您有当前不执行的 JavaScript 脚本块。那是对的吗?它们是在页面脚本中还是在新脚本文件的链接中?
无论如何,我认为这回答了您的问题:如何执行动态加载的 JavaScript 块?
我自己的想法:
除非您的容器非常通用,因此无法知道您可能需要什么 JavaScript,否则最简单的方法可能是手动将所有 JavaScript 附加到您的容器页面,以便它与容器一起加载,可能会缩小并连接成单个文件。
如果您需要动态加载脚本,但您知道它们是什么,您可以使用 jQuery 使用 .getScript() 或 .ajax() 来实现。我认为这个页面很好地说明了事情,http://www.electrictoolbox.com/jquery-dynamically-load-javascript-file/。
同样,如果您在获取 html 块之前不知道需要哪些脚本,您可能会解析 html 以获取脚本链接,并通过添加到页面的新脚本元素手动附加它们。例如,如果页面不存在,下面的脚本会将 jQuery 添加到页面中。
(function () {
if (typeof(jQuery) == "undefined") {
var headID = document.getElementsByTagName("head")[0];
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.id = 'myjQuery';
newScript.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js';
headID.appendChild(newScript);
}
window.addEventListener('load', function (e) {
//make jQuery calls here.
}, false);
})();
使用.on,我不打算解释该函数的所有行为,但只需几句话:
通过 dom 上的冒泡元素工作,例如,您将“onclick”绑定到一个 div,您可以将其设置为他的部分或全部孩子有 x 行为