4

search.html次のjQueryコードを含むhtmlページがあります。

$(document).ready(function(){
...some code // THIS IS THE CODE I'M INTERESTED IN
}
...some other code

そして、次の jQuery コードを含む別の HTML ページがあります。

$("#display_area").load("search.html") // #display_area is a div

問題は、この jQuery コードが呼び出されると、コンテンツを挿入しますが、search.html関心のあるコード ($(document).ready() セクションのコード) をすぐに実行し、 DOM の準備が整うと、明らかにエラーが発生します。

他のコード ($(document).ready() セクションの外側) は問題なく正常に実行されます。

.load() 関数のコールバック関数内にコードを配置しても機能しません。コードは、DOM の準備ができていないときに起動します。

これを解決する方法はありますか?どんな助けでも大歓迎です。

search.html編集: #display_area divに挿入される独自のDOMが含まれていることを指定したいだけで、#display_area divがすべての新しいDOM(コンテンツ)のロードを完了したときにコードを起動したいload() 関数を介してロードされたもの。

4

2 に答える 2

3

あなたの間違いは$(document).ready、メインページのDOMが最初に準備されたときに呼び出されることだと思います。DOMを変更しても再起動しません$(document).ready。あなたの混乱は$("#display_area").load("search.html")、ページが読み込まれたときに呼び出すという事実から来ています。その時点では、元のDOMはまだ終了していませんが、終了すると$(document).ready、後で(ランダムな瞬間に)Ajax関数が返されます。以上です。

Ajax .load関数が戻った後にコードを実行するには、これを使用します

$("#display_area").load("search.html", function() { 
    alert('New DOM elements should be available now'); 
    // do more stuff 
} );

編集:OK、それでこれが全体のスキームです:

  • メインのhtmlページで$("#display_area").load("search.html")、DOMの準備ができたときにのみ呼び出します。したがって、メインページ$(document).readyの関数からこの呼び出しを行います
  • 次に、私が説明したように.loadのコールバック関数を使用し、そこでやりたいことを何でもします
  • 最後に、search.htmlのコードをロード後に実行する場合は、メインページとsearch.htmlの間で関数名について合意します。この関数はsearch.htmlで定義され、.loadコールバックから呼び出されます。
于 2012-06-26T11:31:30.297 に答える
2

search.html の $(document).ready() は、他のページの読み込みが完了していなくても、search.html が読み込まれると発生します。これは、.load() が完了すると発生します。

通常の関数で search.html に JS コードを配置してから、.load() のコールバック関数でこの「新しく追加された」関数を呼び出すことができます。div への入力は、.load() コールバック関数で発生する可能性があります。

于 2012-06-26T11:33:07.533 に答える