有很多方法可以解决这个问题:
对容器的委托
这是迄今为止最简单的方法。容器中的任何现有或未来<a>
代码都将获得指定点击处理程序的功能。
$(function(){
$('#header, #container, #footer').on('click', 'a', function() {
//...
});
$('#header').load("header.html");
$('#container').load("container.html");
$('#footer').load("footer.html");
});
任何一个动作的失败.load()
都不会影响其他动作。
命名函数
使用这种方法,同名函数被指定为所有三个.load()
调用的“完成”回调。
$(function() {
function bindHandler() {
$(this).find("a").on('click', function() {
//...
});
}
$('#header').load("header.html", bindHandler);
$('#container').load("container.html", bindHandler);
$('#footer').load("footer.html", bindHandler);
});
同样,任何.load()
操作的失败都不会影响其他操作。
.when(promises).done()
在这种方法中,.load()
被替换为$.ajax
,它返回一个非常方便的 'jqXHR'(promise)对象。.load()
不能以这种方式使用,因为它返回一个标准的 jQuery 对象;它的承诺对象是不可访问的。
function load(url, selector) {
//make ajax request and return jqXHR (promise) object
return $.ajax(url, {
success: function(data){
$(selector).html(data);
}
});
}
$.when(
load("header.html", '#header'),
load("container.html", '#container'),
load("footer.html)", '#footer')
).done(function() {
// All three ajax requests have successfully completed
$("#header, #container, #footer").find("a").on('click', function() {
//...
});
});
仅当所有三个加载操作都成功时要放置单击处理程序时,才应使用最后一种方法。任何一项.load()
操作的失败都将完全禁止点击处理程序的附加。