2011-12-08 3 views
1

私はフォームとテーブルを持つページを持っています(フォームを使って保存したデータの結果を表示します)。

フォームはajaxを使用してデータを送信し、保存されたデータとその後にテーブルを再ロードする必要があります。

$(document).ready()の実行後にテーブル(AJAX($.load)を使用してロードされる)がロードされるという問題があります。これは、テーブルに必要な機能がないことを意味します。

AJAXの読み込みが完了するまで$(document).ready()の実行を延期する方法はありますか、iframeを使用するような完全な別の方法を使用する必要がありますか?

は、以下の私の問題の例である:

$(document).ready(function(){ 
    //some code here that needed for the html in table.html e.g. datepicker, chosen, jqueryui, etc 
}); 
<form> 
    //Inputs with a button to submit using ajax, where the result is displayed using table.php 
</form> 
<div id="tableOfContent"></div> 
    <script> 
     $('#tableOfContent').load("table.php"); 
    </script> 
+1

残りを呼び出すために負荷()関数の完全なイベントを使用ここでAjaxを使用しています。なぜ単にPHPでテーブルを表示しないのですか? – kapa

+0

私はあなたの問題を理解していません - テーブルが読み込まれていませんか?何らかのエラーが発生していますか? – themerlinproject

答えて

0

document.readyは、ページのHTMLの読み込みが完了したときに呼び出され、それについては二つの方法がありません。

ただし、ライブバインディングを使用すると、ページにまだない要素にハンドラが追加されます。

例:jQueryの> 1.7用に更新

$(".datepicker").live("click", function() { 
    $(this).datepicker(); 
}) 

(これも高速です)

$("#tableOfContent").on("click", ".datepicker", function() { 
    $(this).datepicker(); 
}) 
+0

live()は1.7で廃止されましたので、[on()](http://api.jquery.com/on/) – ManseUK

+0

に置き換えられましたが、on()とbind()の違いは何ですか –

+0

違いはありませんが、1.7以降は 'on()'は.live、.delegate、.bindのアクションを行う新しい方法です。 –

0

あなたは

$('#tableOfContent').load("table.php",function(){ 
    //completed load actions here 
}); 

を行うことができます。しかし、あなたは画像を読み込む場合に注意すべきです、まだロードされません。そうであれば、table.phpの内容を最初に非表示にして、$( '#tableOfContent img').load()で同じことをもう一度行います。これは1つのイメージに対して機能します。複数の画像)もう少し複雑ですが、それはあなたがあなたがjQuery.holdReadyを(使用してreadyイベントを遅らせることができます:)

+0

イメージはロードされませんか?何 ?これはjQueryサイトのレディ文書からです - > JavaScriptはページのレンダリング時にコードを実行するロードイベントを提供しますが、イメージなどのすべてのアセットが完全に受信されるまでこのイベントはトリガーされません。 – ManseUK

+0

ありがとうScott、コールバック機能を使用して実行することができます。問題は、私はdocuement.readyコードを2度書き直して実行したくないということです。私はすべてのJSを1つのファイルに集約し、ウェブサイト内のすべてのページに対して1つのdocument.readyを必要とするアプリケーションに取り組んでいます –

0

探しているものであればお気軽に:

$.holdReady(true); 
// Do your custom stuff... the document may already be loaded. 
$.holdReady(false); // Now the ready event will fire as soon as the DOM is loaded. 

http://api.jquery.com/jQuery.holdReady/

を参照してください。
+0

DOMを操作したいときに、 – ManseUK

+0

私の経験では、holdReadyは主に、特定のAJAXリクエストが完了するまでDOMreadyが起動するのを防ぐために使用されます。 DOM操作は、$(document).ready()ハンドラ内で行う必要があります。 – Interrobang

0

$(document).ready()は、ドキュメントの準備が整ったときに実行するスクリプトに使用する必要があります。

ajax呼び出しの後に何かを実行する必要がある場合は、関数内のすべてを書き込んで、ajaxコールバックを使用して呼び出すことができます。

function what_i_need() { 
    // bla bla 
} 

<script> 
    $('#tableOfContent').load("table.php", {}, what_i_need);//code had syntax error; '{)' 
</script> 

わかりません。さらに、ドキュメントの準備ができたら関数を呼び出すこともできます。

$(document).ready(function(){ 
    what_i_need(); 
}); 
+2

あなたはそこに小さな構文エラーを持っています: 'load(" table.php "、{)、' – flesk

+0

しかしここでwhat_i_need()のコードを実行すると、問題の原因となるかもしれません –

0

レディ機能の中から表データをロードし、私は本当にポイントを理解していない

$(document).ready(function() { 
    // click bindings etc .. 
    $('#tableOfContent').load("table.php",function() { 
     // things to do once the table is loaded 
    }); 
}); 

load() documentation

+0

ここでの問題は、実行する必要があるのはページ全体に共通なので、コールバックを成功させると、コード(document.readyの同じコード)を2回実行する必要があります。これは次のような問題を引き起こします: –

+0

続き:クリックしてdivをバインドするとコードが2回実行されます –

+0

@malkawiコールバックの日付のデータに依存するコードとそれ以降のコードを呼び出します$(document).ready()関数...何も2回呼び出す必要はありません - あなたの質問にいくつかのコードを追加して、私は自分の答えを改善します – ManseUK

関連する問題