2011-06-19 16 views
1

jQuery .load()を使用してPHPファイルを読み込みます。このPHPファイルは新しいdivをエコーし​​ます。このdivには属性 "title"が含まれています。その値はjsファイルに取り込む必要があります。.load()を使用してロードされたファイル経由でDOMに追加された要素へのアクセス

// file.php 
echo '<div id="max_page" title="' . $max_page . '"></div>'; 

// js 
$("someElement").load("file.php"); 
var num = $("div#max_page").attr("title"); 

この結果、num = "undefined"となります。私は、この理由は、最初の$(document).readyが実行された後にdiv#max_pageがDOMに追加され、jQueryがその存在を単に知りませんと仮定しています。そうですか?

どのように問題を解決できますか? (.live()を試してみましたが、私のために働くことができませんでした)

答えて

1

numをチェックすると、ajaxがページの読み込みを完了していないため、まだDOMに追加されていませんDOMはまだありません。 loadcompleteコールバックでそれを実行します。

$("someElement").load("file.php",function(){ 
var num = $("div#max_page").attr("title"); 
}); 
+0

私は示唆したように、実際には属性の値を取得しました。しかし、それはまだ変わっています。 var num = ...の行の下にある関数を呼び出すことはできますか? – Ben

+0

割り当てられる 'num'に依存する@Ben関数、no。コールバック関数にもその要素を入れる必要があります。 – Niklas

+0

私がしたいのはこれです:obj.totalPages = $( "div#max_page")。attr( "title"); displayNumbers(obj);そして、それは動作しません。しかし、displayNumbers()からすべてのコードを取得してコールバックにコピーすると動作します。冗長性を確保する方法はありますか? – Ben

0

あなたは右のあなたのタイミングが間違っ:)であることを考えるにしている

2番目の引数として渡された関数が file.php直後に実行されます

// js 
$("someElement").load("file.php", function(){ 
    var num = $("div#max_page").attr("title"); 
    // here you can do with num whatever you need 
}); 
です someElementにロードされているため、この時点でtitle属性が存在することが保証されています。

0

numを設定するとファイルが読み込まれません。コールバックを使用します。

$("someElement").load("file.php", function() { 
    var num = $("div#max_page").attr("title"); 
}); 
関連する問題