Ajax を使用して一連のデータを読み込む Web アプリがあります。そのデータはライトボックスを起動します。ライトボックスが閉じると、最初の ajax を呼び出して元のデータを更新する必要があります。javascript をスコープ内に維持するためにいくつかの問題が発生しています。
index.phpには、子ページのリストを描画する ajax が含まれています。
<!-- Container for the content -->
<div id="pageListContainer" data-category-id="1"></div>
<script>
// Re-usable function to draw the pages
function drawPageList() {
var container = '#pageListContainer';
var categoryId = $(container).data('categoryId');
$.post('webservice.php', {action: 'drawPageList', categoryId: categoryId}, function(data) {
$(container).removeClass('loading').html(data);
});
}
// Now draw the pages
drawPageList();
// Function to open the page links as an iFrame in a lightbox
$('#pageList a').click(function(event) {
event.preventDefault();
$.fancybox({
type : 'iframe',
padding : 0,
autoSize: false,
width: 440,
height: 440,
href: this.href + "&lightbox=true",
});
});
</script>
webservice.phpは次のようなものを返します。
<ul id="pageList">
<li><a href="page.php?pageId=1">Page One</a></li>
<li><a href="page.php?pageId=2">Page Two</a></li>
<ul>
上記は、ライトボックスの open 関数が「#pageList a」を対象としており、DOM のその部分が ajax を介して読み込まれるため、失敗します。これを解決するには、$('#pageList a').click() 関数を webservice.php からの ajax 結果に追加しますが、JS を複数の場所に分割すると、他のスコープの問題が発生します。このような JS 関数のグローバル スコープのベスト プラクティスはありますか?