特定の要素に「on ajax completion」イベントを追加しようとすると問題が発生します。「ajax-loader」の属性を持つdivを動的にロードする次の控えめなJS関数があります。この関数はうまく機能し、グローバル スクリプト ファイルにあり、サイト全体の多くのページで使用されているため、このスクリプトにページ固有の関数を追加することはできません。
<script type="text/javascript">
$(document).ready(function () {
$('[ajax-loader]').each(function () {
var loadContainer = $(this);
var loadUrl = loadContainer.attr('ajax-loader');
$.ajax({ url: loadUrl, type: 'GET', cache: 'false' }).done(function (data) { $(loadContainer).html(data); });
});
});
</script>
これは、上記の関数を使用してコンテンツを動的にロードするページの抜粋です。この場合、ロードされるコンテンツは標準テーブルです。
<body>
<div id="MyDynamicDiv" ajax-loader="/SomePageThatReturnsATable"></div>
<div id="MyPopUpDialog"></div>
</body>
ここで、動的コンテンツをロードした後、JQuery DataTables を使用してテーブルをフォーマットし、JQuery ダイアログを開いて動的にロードするボタンの 1 つに「クリック」イベントを追加するスクリプトを上記のページに追加したいと思います。そのダイアログに他のデータ。これは、これを実現するために私が思いついたスクリプトです。
<script type="text/javascript">
$(document).ready(function () {
$('#MyDynamicDiv').ajaxComplete(function () {
console.log('MyDynamicDiv Load Complete');
$('#MyDynamicallyLoadedTable').dataTable({"bJQueryUI": true});
$('.myDialogButton').click(function () { $('#MyPopUpDialog').dialog().load('/MyDialogContent'); });
});
});
</script>
問題は$('#MyDynamicDiv').ajaxComplete(function () {...});
、ダイアログがロードされている場合でも (基本的にすべての ajax リクエストに対して) が呼び出されることです。#MyDynamicDiv の読み込みが完了したときにのみ呼び出す必要があります (一度だけ)。私はajaxComplete
その特定のセレクターに関連付けられた関数を持っているので、他のロード完了イベントでなぜそれが起動するのかわかりません。
console.log
最初にページが読み込まれたときに 1 回、ダイアログが最初に開かれたときに 2 回、ダイアログが 2 回目に開かれたときに 4 回など、関数が繰り返し呼び出されていることを知っています。
ダイアログのロード時に次のエラーがスローされるため、DataTables を使用すると問題が悪化します。
DataTables 警告 (テーブル ID = 'MyDynamiclyLoadedTable'): DataTable を再初期化できません。このテーブルの DataTables オブジェクトを取得するには、引数を渡さないか、bRetrieve と bDestroy のドキュメントを参照してください
ajaxComplete 以外に使用する必要がある他の JQuery 関数はありますか、または何が間違っていますか?