2011-04-05 5 views
5

Jsonを返すMVC3アクションから、いくつかのパラメータと内容を文字列として含むデータをロードしています。私はいくつかのdivにコンテンツを追加します。部分ビューでは、私はdocument.ready JQueryイベントを持っています。何らかの理由で、コンテンツが追加される前に関数が実行され、ready関数で宣言したセレクタはすべて空です。JQuery - 前の要素ロードを実行しています

論理的な理由はありますか?セレクタが要素を参照するタイムアウトを設定していますか?しかし、タイムアウトは非常に不正確です。

提案がありますか?

ありがとうございます!

例コードフィドル:http://jsfiddle.net/aKxy7/

答えて

0

私は、Ajax経由で読み込まHTMLで選択された要素の準備が整うまで待機符号化方法をアップしました。

+0

これは古い回答ですが、コードスニペットを提供できますか? –

2

あなたはがロードされている結局assestsを発射する$(document).ready()を期待しているように聞こえます。それはどのように$(document).ready()の動作ではありません。 DOMがレンダリングを終了するとトリガーされます。これ以上何もない。 $(window).load()を使用したいと思うようですが、がすべてのアセットがロードされるまで待機します。

+1

私は全面ポストバックを実行していないので、$(window).load()関数はAJAXリクエストで起動しません。 –

+0

ヒント:$(window).load()はバージョン1.8から非推奨です。 – robsch

0

$(document).ready()は、HTML!が読み込まれます。これは、あなたのHTMLがHTML DOMを変更するいくつかのjavascriptを読み込んだ場合、その前に$(document).ready()が呼び出されることを意味します。

関数が最後に呼び出されていることを確認するか、必要な要素がすべてロードされるまで自身を呼び出すsetTimeoutを使用する必要があります。あなたの$で

0

(ドキュメント).ready機能あなたのサーバーから答えを得るためにjQueryの $アヤックスや $ .getJSON を呼び出すことができます。次に、必要な場所でjsonレスポンスを注入することができます。何のsetTimeoutは、私は同じ問題を持っていた

0

まず第一に、

var elementIWannaGet = $('html-content-div'); 

しかし

var elementIWannaGet = $('#html-content-div'); 

する必要があり、あなたはDOMがすでにロードされているように、コンテンツからスクリプトを分離されてやったほうが良いかもしれないもの...

応答を次のように変更することを検討してください。

そして、次のようにあなたのcontentLoadedハンドラを変更:

function contentLoaded(response) { 
    if (response.result == true) 
     handleError(response); 

    // Get the container where the response.content will be rendered to. 
    var targetContainer = $('#target-container-id'); 

    // Append the content 
    targetContainer.append(response.content); 

    // Do something with your container 
    alert($(response.elementId).html().length); 
} 
関連する問題