2010-11-29 5 views
1

私たちは、「初期化機能」ラの数ではJavaScript/jQueryのページを持っている:すべてのinit関数がいつ完了したかを決定しますか?

$(function(){ 
    //Do stuff 
} 

すべてのこれらのメソッドの実行が完了したときに決定することができ、プログラム方法はありますか?

私たちは、よりエレガントな方法があったかと思いまして...)(最後の関数でtrueにブール変数を設定することができます。

答えて

2

$.isReadyが実行されているかどうかを判断する必要がある場合は、DOMの準備が整っていればtrueになります。すべてのハンドラを実行する直前まで設定されていないので... pretty-much- being - 一本のスレッドがあればあなたのところで動くでしょう。

あなたは、(それがdocument.ready前に火災をキューに登録する必要があります)を実行するために何かをキュー"ready"にバインドし、このようにしたい場合:

$(document).bind("ready", function() { alert("All ready functions ran"); }); 

You can see how it's fired here、これは同じないであることに注意してください$(document).ready(),which is another functionとなります。すべての初期化「のものを」と仮定すると、

+0

$ .isReadyが私のために動作するようには思えないが。最後の関数()でブール変数をtrueに設定すると、動作します。jqGrid loadCompleteコールバックメソッドのこの準備インジケータを参照して、コールバックが最初のロードまたは後続のロードで呼び出されているかどうかを確認します。 –

+0

@Marcus - どのバージョンのjQueryを使用していますか? –

+0

バージョン1.4.3 ... –

1

が同期している、あなたはすべてが初期化されていることを知識でコードを実行できているあなたのページの最後の1、の最後に関数を呼び出すことができます。

$(function(){ 
    //Do stuff 

    run(); 
} 

function run() { 
    // we are initialised now... 
} 

これはあなたが求めて正確に何ではありませんが、それは初期化機能が実行して完了している...とすぐに、彼らはrun機能を持っているとして呼び出されることを確認する必要がなくなります。

1

this (example)を試してみてください。

HTML:

<div id="test"></div> 

JS:

(function ($) { 

    var 
     owReady = $.ready, 
     readyEndList = []; 

    $.ready = function() { 

     var 
      toEnd = owReady(), 
      fn, i = 0; 

     if (toEnd) 
      return toEnd; 

     if (!$.isReady) 
      return toEnd; 

     while ((fn = readyEndList[ i++ ])) { 
      fn.call(document, jQuery); 
     } 

     readyEndList = null; 

     return toEnd; 

    }; 

    $.addToEndReady = function(fn) { 

     if ($.isFunction(fn)) 
      readyEndList.push(fn); 
    }; 

    $(function (ev) { 

     $('#test').append('<span>0</span><br />'); 

     $.addToEndReady(function(){ 

      $('#test').append('<span>end</span><br />'); 

     }); 

    }); 

    // inicio del modulo 
    $(function (ev) { 

     $('#test').append('<span>1</span><br />'); 

    }); 

    $(function (ev) { 

     $('#test').append('<span>2</span><br />'); 

    }); 

} (jQuery)); 
関連する問題