这是一个来自nettuts的简单加载脚本,我试图修改它以满足我的需要。 但是我无法在函数shownewcontent运行之前获得调整加载元素大小的函数“res”。现在它在可见之后调整大小,这看起来很糟糕。 但是,如果我尽快调用该函数,则没有任何反应,因为内容尚未加载。
$(document).ready(function() {
var hash = window.location.hash.substr(1);
var href = $('#menu a').each(function(){
var href = $(this).attr('href');
if(hash==href.substr(0,href.length-4)){
var toLoad = hash+'.php #content';
$('#content').load(toLoad);
}
});
$('#menu a').click(function(){
var toLoad = $(this).attr('href')+' #content';
$('#content').hide('slow',loadContent);
window.location.hash = $(this).attr('href').substr(0,$(this).attr('href').length-4);
function loadContent() {
$('#content').load(toLoad,'',showNewContent());
}
function showNewContent() {
$('#content').show("0", res)
}
return false;
});
});
答案 0 :(得分:0)
您已将res()
定义为回调至show()
,这意味着在show()
功能完成后将被称为。
我会改变你的回调结构,使其包含你想要做的所有工作:
$('#menu a').click(function(e) {
var toLoad = $(this).attr('href') + ' #content';
$('#content').hide('slow', function() {
var self = this;
$(self).load(toLoad, '', function() {
res();
$(self).show("0");
});
});
window.location.hash = $(this).attr('href').substr(0,$(this).attr('href').length-4);
e.preventDefault();
}
然后您不需要单击处理程序中的函数定义。
仅供参考,而不是return false;
,最好在点击处理程序的末尾使用e.preventDefault();
。您必须将e
定义为单击回调函数的参数。有关return false; vs. e.preventDefault()
辩论,请参阅this。
此外,如果调整大小花费了相当多的时间,您可能希望res()
函数以与show()
相同的方式进行回调。然后,只有在加载和调整大小后才能显示内容。