这是一个似乎已经被问过几次的问题的具体变体,如果答案已经存在,我们深表歉意。
我有一个带有菜单栏和大型内容 div 的标准网站。每次呈现页面时,我都想运行许多 javascript 函数,也就是说 - 在初始加载和更新中心内容 div 的任何 ajax 调用之后。
我知道我需要在 ajax 调用的“成功”部分调用它们——但我试图避免的是一个巨大的调用列表都在一个地方。我有大约 30 个 javascript 文件,我想将它们分开而不是相互依赖。
我正在尝试设置的是一个中央“功能注册表”——这就是我到目前为止所拥有的——
var rebind = function(){
var functions = [];
var add = function(f){
functions.push(f);
}
var call = function(){
for (i = 0; i < functions.length; i++) {
functions[i]();
}
}
return {
add: add,
call: call
}
}();
这是我如何调用这个函数 -
$(function() {
rebind.call();
});
$(document).on("click", "a.ajax-content", function() {
var url = $(this).attr("href");
$("div#content").load(url, function() {
rebind.call();
});
history.pushState(null, null, url);
event.preventDefault();
});
这是我如何注册函数的示例,以 Datepicker 为例。
rebind.add(function() {
$(".dm-type").datepicker({
dateFormat: "dd/mm",
changeYear: false,
changeMonth: true
});
});
澄清一下,我尽可能使用 $(document).on('click'...。此方法仅适用于需要在页面加载后调用的函数。document.ready 的全局版本也可以处理AJAX 调用。
这似乎是一个好主意,但它不是 100% 工作的。我得到了一些无限循环,例如 jquery-raty。
有没有人为此提出一个好的解决方案?我查看了 livequery,它没有处理我需要的所有内容,我读到不建议这样做,因为它会减慢速度。如果有一个简单的解决方案,那将对我有很大帮助。
谢谢!詹姆士