Я создаю приложение, в котором пользователь может создать html-макет и приложить к нему javascript.
Теперь я пытаюсь сделать это, когда они нажимают кнопку, они переходят в режим предварительного просмотра, где они могут видеть это в действии. Поэтому, когда они нажимают, я добавляю тег javascript (со своим javascript) в заголовке iframe.. это все работает отлично!
Но проблема в том, что когда они покидают режим предварительного просмотра, я удаляю тэг javascript, однако, когда у меня есть такой код:
$('#button').click(function()
{
alert("ok");
});
он по-прежнему предупреждает о том, когда я нажимаю кнопку html (если не в режиме предварительного просмотра!), чего не должно быть!
Похоже, что при удалении тега javascript слушатели не удаляются.. Или я делаю это неправильно?
Теперь мой вопрос: есть ли способ сделать это, чтобы эти добавленные eventlisterens были удалены, когда я удаляю тег скрипта?
И ДА: я знаю, что вы можете удалить обработчики событий с помощью.off(), но поскольку у меня уже есть обработчики событий, они также будут удалены, и я не хочу этого!
Итак, я могу подумать о двух вариантах: - перестроить весь iframe - сохранить обработчики событий, которые были добавлены пользователем, и выйти из режима предварительного просмотра, удалив их.
заранее спасибо
Поскольку это не jQuery вообще, а также javascript с ванилью, было бы слишком много работать, чтобы отслеживать изменения javascript, поэтому лучший вариант здесь - перестройка iframe.
Каждый раз, когда вы "оцениваете" JavaScript, он становится частью "изображения" браузера и не имеет значения, присутствует ли источник на странице. Вам необходимо вручную отменить событие или заменить сегмент html, с которым было связано событие.
Чтобы удалить события из элемента html, вы можете использовать:
element.parentNode.innerHTML = element.parentNode.innerHTML
Это восстанавливает дерево DOM, используя тот же HTML.
Установите событие:
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()
вам нужно отменить событие.
Вы можете сделать это, используя jquery unbind()
или off()
следующим образом:
$("#button").unbind("click");
или
$("#button").off("click");
Демо: http://jsfiddle.net/a6NJk/664/
jQuery Док: http://api.jquery.com/off/
Еще один хороший ответ: лучший способ удалить обработчик событий в jQuery?