0

这是一个来自 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;
    });
});
4

1 回答 1

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()辩论。

此外,如果调整大小需要相当长的时间,您可能希望res()函数以相同的方式进行回调show()。然后,您只能在内容加载和调整大小后显示内容。

于 2013-04-03T18:51:44.543 回答