Управление областью JavaScript в приложении Ajax через JQuery - PullRequest
1 голос
/ 22 декабря 2011

Интересно, как управлять областью действия скрипта в полном приложении ajax

Позвольте мне объяснить сценарий

  • Страницы загружаются динамически в div,
  • страницы - файлы php
  • страницы содержат теги сценариев (статические и сгенерированные с помощью php) в зависимости от контекста

сценарий загрузки:

  1. загрузка главной страницы через$ .load jquery функция
  2. страница вставлена ​​и скрипт выполняется (в основном входные события или живые события)

, когда я выбираю другую страницу (просто представьте комбо со всеми перечисленными страницами в списке)), сценарий загрузки выполняется снова ...

строка кода 2 js, которая имеет значение на главной странице

$("#divContent").children().remove(); 
$("#divContent").load("*PAGES-X*");

)

Вот большие проблемы,JQuery eval код сценария и, кажется, затем помещают его в массив Eval (в firebug он находится по адресу jquery.mins.js / eval / seq / номер массива ), поэтому js никогда не бываетвыгружен из вкладки eval

Так что если на моих страницах есть какое-либо событие Live, тоКод выполняется столько раз, сколько страниц было загружено ...

Итак, мне нужен способ очистить этот eval ... или автоматический способ удалить все события изконкретная область (потому что у меня есть другие события, связанные на главной странице)

Спасибо вам

Ответы [ 3 ]

1 голос
/ 22 декабря 2011

возможно

$(selector).die();

пригодится? Он удалит все привязки live () для выбранных элементов. См. http://api.jquery.com/die/ для получения дополнительной информации!

0 голосов
/ 21 декабря 2012

Вы можете попробовать использовать пространства имен.На вашей главной странице:

var ws = {};

В загруженном контенте:

$( ws.funnyStuff = function() {
// some realy funny stuff here  
});

Когда вы закончите, вы можете отказаться от всего пространства имен:

ws = {};

Примечание: запись в firebug останется, я точно не знаю, почему, но связанный код больше не будет выполняться.

0 голосов
/ 22 декабря 2011

После загрузки скрипта, AFAIK, невозможно его выгрузить.

Вы можете использовать iframe, а не div, таким образом, когда страница перезагружается, вы начинаете с чистого листа.Сланец (внутри iframe) еще раз.

Или, альтернативно, напишите ваш javacsript таким образом, чтобы не вызывать коллизии, если несколько скриптов загружаются одновременно.

...