Удалить прослушиватель событий, добавленный с помощью eval - PullRequest
1 голос
/ 12 июля 2010

Я постараюсь объяснить, как могу ...

У меня есть страница, мы будем называть ее страницей А.Когда на этой странице нажимают кнопку, отправляется запрос ajax и возвращаются данные eval () 'd.Эти данные, очевидно, содержат код JavaScript.Этот код может содержать прослушиватели событий, которые добавляются в pageA, когда он eval'd.Что-то вроде jquery $ ('body'). Click (), например.

Когда снова нажимается кнопка на странице A, есть ли функция или что-то, что удаляет все и все прослушиватели событий и данные, добавленные в это eval.

Я собираю все данные, возвращенные из вызова ajax, в переменную перед тем, как вычислять их, так что есть ли способ просто сделать $ (data) .remove () и получить все прослушиватели событий иданные волшебным образом исчезают?

При использовании eval-данных они на самом деле не добавляются на страницу как таковую, где я мог бы просто удалить текст на странице и устранить все мои проблемы, но слушатели событий, безусловно, остаются.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 12 июля 2010

Я воздержусь от лекции о зле eval и рекомендую вам попробовать пространство имен ваших событий в jQuery.

http://docs.jquery.com/Namespaced_Events

Например, может ли код в данных добавлять все новые события с пространством имен:

$(node).bind("click.myNameSpace", fn);

А когда вы хотите его удалить, выпросто сделайте $(node).unbind("click.myNameSpace"), конечно, это предполагает, что вы знаете, к каким элементам они были добавлены.Если вы не знаете тип события, которое было добавлено, вы также можете сделать $(node).unbind(".myNameSpace"), и он удалит все события в вашем пространстве имен.

0 голосов
/ 12 июля 2010

Может быть проще просто скопировать все подключенные в данный момент обработчики событий для конкретной кнопки перед тем, как eval вернет JavaScript. Затем отмените привязку всех событий (к которым eval мог бы добавить дополнительные обработчики) и перепривязайте то, что было раньше.

РЕДАКТИРОВАТЬ : Похоже, у кого-то уже был похожий вопрос: jQuery: отсоедините обработчики событий, чтобы связать их позже (хотя при этом используется jQuery).

Я не могу не спросить, разве у вас нет контроля над JS, который возвращается? Потому что если вы это сделаете, было бы лучше убедиться, что вредоносный контент никогда не отправляется.

...