удаление динамического тега JavaScript не удаляет вложенные события

0

Я создаю приложение, в котором пользователь может создать html-макет и приложить к нему javascript.

Теперь я пытаюсь сделать это, когда они нажимают кнопку, они переходят в режим предварительного просмотра, где они могут видеть это в действии. Поэтому, когда они нажимают, я добавляю тег javascript (со своим javascript) в заголовке iframe.. это все работает отлично!

Но проблема в том, что когда они покидают режим предварительного просмотра, я удаляю тэг javascript, однако, когда у меня есть такой код:

$('#button').click(function()
{
    alert("ok"); 
});

он по-прежнему предупреждает о том, когда я нажимаю кнопку html (если не в режиме предварительного просмотра!), чего не должно быть!

Похоже, что при удалении тега javascript слушатели не удаляются.. Или я делаю это неправильно?

Теперь мой вопрос: есть ли способ сделать это, чтобы эти добавленные eventlisterens были удалены, когда я удаляю тег скрипта?

И ДА: я знаю, что вы можете удалить обработчики событий с помощью.off(), но поскольку у меня уже есть обработчики событий, они также будут удалены, и я не хочу этого!

Итак, я могу подумать о двух вариантах: - перестроить весь iframe - сохранить обработчики событий, которые были добавлены пользователем, и выйти из режима предварительного просмотра, удалив их.

заранее спасибо

  • 0
    так где твой код?
  • 0
    Может быть, попробуйте это: stackoverflow.com/questions/13945025/… . Или, может быть, вы могли бы снова перезагрузить свой iframe.
Показать ещё 3 комментария
Теги:

4 ответа

0
Лучший ответ

Поскольку это не jQuery вообще, а также javascript с ванилью, было бы слишком много работать, чтобы отслеживать изменения javascript, поэтому лучший вариант здесь - перестройка iframe.

1

Каждый раз, когда вы "оцениваете" JavaScript, он становится частью "изображения" браузера и не имеет значения, присутствует ли источник на странице. Вам необходимо вручную отменить событие или заменить сегмент html, с которым было связано событие.

Чтобы удалить события из элемента html, вы можете использовать:

element.parentNode.innerHTML = element.parentNode.innerHTML

Это восстанавливает дерево DOM, используя тот же HTML.

  • 0
    Любые идеи о том, как узнать, какие обработчики событий добавляются с точки зрения оценки JavaScript?
  • 0
    Насколько я знаю, ты не можешь. Я обновил ответ тем, что вы можете попробовать. Может быть достаточно для того, что вы пытаетесь сделать.
Показать ещё 5 комментариев
0

Установите событие:

var $button = $('#button');
$button.on("click", function() {
    alert("ok"); 
});

Снимите событие:

$button.off("click");

Вы также можете снять эту функцию

var $button = $('#button');
var eventFunction = function() {
    alert("ok"); 
});

// Set event up
$button.on("click", eventFunction);

// Take event off
$button.off("click", eventFunction);

Если вы хотите удалить все события из элемента, который вы можете использовать

$("#yourSelector").off()
  • 0
    Не то, что я ищу .. пожалуйста, прочитайте вопрос перед публикацией ..
0

вам нужно отменить событие.

Вы можете сделать это, используя jquery unbind() или off() следующим образом:

$("#button").unbind("click");

или

$("#button").off("click");

Демо: http://jsfiddle.net/a6NJk/664/
jQuery Док: http://api.jquery.com/off/

Еще один хороший ответ: лучший способ удалить обработчик событий в jQuery?

  • 0
    Как я могу узнать, какие обработчики событий прикреплены? Потому что оценивается javascript от пользователя! Я не знаю, какие события они используют. И я не могу сделать это, так как это удаляет всех слушателей, и я этого не хочу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню