そのため、他の多くの人と同じように、ajax でロードした外部ページからのスクリプトの処理に問題があります。
その上に「管理パネル」があるページを設定しようとしています。パネル内の複数の管理ページに移動できるようにしたいと考えています。さまざまな管理ページには、それらに含まれる内部および外部の両方の<script>
js ファイルがあります。スクリプトは正常にロードされますが、スタックしているように見えるか、適切に管理されていません。
管理ページの 1 つで小さなテストを行いました。
$('.left-col').click(function () {
alert();
});
ここでは、このページに戻るたびに別のクリックがバインドされるため、div をクリックするたびに 2 つのアラートが表示されます。$('.left-col').unbind();
これは、ajax.success で実行することで簡単に解決できます。
ただし、一部の管理ページには大量の .click/.change/.live などがあり、それらが何であるかさえわかりません (つまり、外部プラグインから)。では、各要素を指定せずに、ajax でロードされた各ページからロードされたすべてのスクリプトを何らかの方法でアンバインド/削除できますか? アンバインドでセレクターを使用できることはわかっていますが、各 div/img/input などをループしてバインドを解除するのはあまり効果的ではないようです。また、それが機能するかどうかもわかりません。
これは、管理ページをロードする方法です。
<script type="text/javascript">
$(document).ready(function() {
function reloadAdminPanel(url) {
if(typeof(url) === "undefined") {
var url = '/admin/panel/dashboard/';
}
$.ajax({
'success': function (data, textStatus) {
var jData = $(data);
// override links in admin to run reloadAdminPanel()
jData.find('a').each(function() {
var newUrl = $(this).attr('href');
$(this).click(function(e) {
reloadAdminPanel(newUrl);
return false;
});
});
$('div.panel__inner').remove();
$('body').prepend(jData);
delete jData;
},
'url': url
});
}
reloadAdminPanel();
});
</script>
どんな助けでも大歓迎です、乾杯!
ページの構造:
<html>
<body>
<div class="panel__inner"> <!-- admin panel --> </div>
<!-- rest of project site -->
</body>
</html>