jQuery は DOM 要素で動作します。これらのメソッドは、ほとんどの場合、ドキュメントの準備が整うと実行されます(いわゆる $(document),ready() メソッド内)。したがって、ajax 呼び出しの前に初期化されるメソッドは、動的に作成された要素にアクセスできません。complete
これを実現するには、ajax 呼び出しのメソッド内でバインド メソッドを再度初期化します。次に例を示します。
例 1 : これは機能しません。
HTML
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
<button onclick="get_ajax_data();">Get Data</button>
jquery
$(document).ready(function(){
get_width();
get_ajax_data();
});
function get_width(){
# some code to get the width;
}
function get_ajax_data(){
$.ajax({
# Some code to get data from the ajax call
# and then append it as a <li> to the <ul>
});
}
上記の例では、ボタンをクリックしてデータを取得すると、メソッドが初期化された時点でその要素が存在しなかったため、メソッドは ajax を介して (動的に) 追加されget_width
た新しい項目にアクセスできません。したがって、次のようにする必要があります。<li>
get_width
<li>
例 2: これでうまくいきます。
HTML
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
<button onclick="get_ajax_data();">Get Data</button>
jquery
$(document).ready(function(){
get_ajax_data();
});
function get_width(){
# some code to get the width;
}
function get_ajax_data(){
$.ajax({
# Some code to get data from the ajax call
# and then append it as a <li> to the <ul>
complete: function(){
get_width();
}
});
}
get_width
上記で行ったことは、ajax 呼び出しが完了した後にメソッドを再度初期化しget_width
て、新しく作成された要素にもアクセスできるようにすることでした。