删除动态javascript标记不会删除附加事件

时间:2014-02-24 20:08:21

标签: javascript jquery

我正在创建一个应用程序,用户可以在其中制作html布局并将javascript附加到其中。

现在我正试图这样做,当他们点击一个按钮时,他们会进入预览模式,在那里他们可以看到它在行动..所以当他们点击我添加javascript标签(用他们的javascript)在头部iframe ..这一切都很好!

但问题是当他们离开预览模式时,我删除了javascript标签,但是当我有这样的代码时:

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

当我点击html按钮时(当不是在预览模式中时)它仍然会发出警报,这不应该发生!

似乎在删除javascript标签时,不会删除侦听器..或者我做错了吗?

现在我的问题:是否有一种方法可以使删除脚本标记时删除这些添加的eventlisterens?

AND YES:我知道您可以使用.off()删除事件处理程序,但由于我已经附加了事件处理程序,因此这些也将被删除,我不希望这样!

所以我可以考虑两个选项: - 重建整个iframe - 存储用户添加的事件处理程序,并在离开预览模式时删除它们。

提前致谢

4 个答案:

答案 0 :(得分:1)

每次“评估”JavaScript时,它都会成为浏览器“图像”的一部分,并且页面上的源是否不再重要。您需要手动取消绑定事件,或者替换绑定事件的html段。

要从html元素中删除事件,您可以使用:

element.parentNode.innerHTML = element.parentNode.innerHTML

这使用相同的HTML重建DOM树。

答案 1 :(得分: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()

答案 2 :(得分:0)

你需要取消绑定事件。

您可以使用jquery unbind()off()来完成此操作 像这样:

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

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

演示:http://jsfiddle.net/a6NJk/664/
jquery Doc:http://api.jquery.com/off/

另一个好的答案:Best way to remove an event handler in jQuery?

答案 3 :(得分:0)

因为它不是jQuery,而且也不是jilla javascript,跟踪javascript更改会有太多工作,所以重建iframe将是最好的选择。