2

データをロードしているdiv内にスピナーをロードするように.loadの動作を変更する方法はありますか?

<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')のコンテンツが、新しいコンテンツのロードが完了するまでスピナーに置き換えられることです。

.loadを拡張して、それを自分で実行し、ajaxstartを置き換える方法はあります。そのため、$(div).load()が呼び出されると、a$(div).html('spiner');が起動されます。

そうでない場合、.ajaxstartがコンテンツがロードされるdivを参照できる方法はありますか?

注意:現在、すべてのWebページのヘッダースクリプトで.ajaxstartと.ajaxstopを使用して、スピナーの表示を一般的に処理していますが、それをさらに編集しなくてもどのページでも機能するdiv固有のソリューションに置き換え/拡張したいと思いますすべてのajaxリクエストに。

ありがとう

4

1 に答える 1

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()メソッドが変更されるため、他のスクリプトがそのメソッドを呼び出した場合でも、少なくともその関数の再定義が解析された後は、「自分のもの」を実行する必要があります。

于 2013-02-25T16:59:15.727 に答える