jQuery加载器调用函数

时间:2013-04-03 18:46:20

标签: javascript jquery

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

1 个答案:

答案 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()相同的方式进行回调。然后,只有在加载和调整大小后才能显示内容。