有没有办法改变.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请求。
感谢
答案 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()
方法,因此即使其他脚本调用该方法,也应执行“你的东西”,至少在解析了该函数的重新定义之后。