Структура для обработки нескольких скриптов, загруженных из ajax - PullRequest
0 голосов
/ 02 сентября 2011

Так что, как и у многих других, у меня проблемы со скриптами с внешних страниц, которые я загружаю с помощью ajax

Я пытаюсь создать страницу с «административной панелью» поверх нее.Я хочу, чтобы иметь возможность перейти к нескольким страницам администратора на панели.На разных страницах администрирования есть как внутренние <script>, так и внешние js-файлы, которые они включают.Скрипты загружаются так, как должны, но, похоже, они складываются или плохо управляются.

Я провел небольшой тест на одной из страниц администратора:

$('.left-col').click(function () {
    alert();
});

Здесь, всякий раз, когда я возвращаюсь на эту страницу, она привязывает к ней еще один щелчок, поэтому я каждый раз получаю два предупрежденияЯ нажимаю div.Я могу легко решить эту проблему, запустив $('.left-col').unbind(); в моем ajax.success.

Однако для некоторых административных страниц существует множество .click / .change / .live и т. Д., И я даже не уверен, что они есть (то есть из внешних плагинов).Так могу ли я как-то отсоединить / удалить все скрипты, загруженные с каждой из моих страниц, загруженных ajax, без необходимости указывать каждый элемент?Я знаю, что могу использовать селекторы с unbind, но, кажется, не очень эффективно зацикливаться на каждом div / img / input и т. Д. И unbind, и я даже не уверен, сработает ли это.

Вот так я загружаюстраницы администратора:

<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>

1 Ответ

0 голосов
/ 02 сентября 2011

Может быть, это поможет, если вы покажете нам структуру элементов, но из определения «Удалить» в Jquery он должен удалить элемент, его дочерние элементы, все события и любые данные, связанные с ним.

Расположен ли div.panel__inner внутри вашего тега body?Я вижу, что вы делаете удаление для div, но добавляете данные к $ ('body').Можете ли вы удалить само содержимое тела?

...