扩展jquery load()函数以显示div内的微调器

时间:2013-02-25 16:33:29

标签: javascript jquery jquery-load

有没有办法改变.load行为,以便在任何正在加载数据的div中加载spiner?

例如

<div class='content lside'></div>
<script>
    $(document).ajaxStart(function() {
        $('body').append('<div class="notice" style="position:fixed;top:40%;left:30%;z-index:99999;"id="loadingspin">loading</div>');       });
    $(document).ajaxStop(function() {
        $('#loadingspin').fadeOut().remove();
    });
    $('.content').load("<?=base_url();?>booking/<?=$day?>");
</script>

我使用上面的脚本。

但我真正想要的是,当ajaxstart时,$('。content')的内容被替换为spinner,直到它完成加载新内容。

所以有一种方法可以扩展.load来自己做并替换ajaxstart, 所以无论在哪里调用$(div).load(),都会触发$(div).html('spiner');

如果没有,有没有办法.ajaxstart可以引用内容将被加载到的div?

请注意:我目前在我的所有网页的头文件脚本中使用.ajaxstart和.ajaxstop来处理一般的微调器,但我想用div特定解决方案替换它/扩展它这仍然可以在任何页面上工作而无需进一步编辑每个ajax请求。

感谢

1 个答案:

答案 0 :(得分:2)

这样的事情应该可以解决问题。覆盖jQuery的原型并保存旧函数。

(function(){
    var oldLoad = jQuery.fn.load;
    jQuery.fn.load = function( url, data, complete ){
        /*
         * do your stuff
         */
        oldLoad.call( jQuery, url, data, complete );
    }
})();

这改变了整个页面的全局可用jQuery.load()方法,因此即使其他脚本调用该方法,也应执行“你的东西”,至少在解析了该函数的重新定义之后。