我正在创建一个应用程序,用户可以在其中制作html布局并将javascript附加到其中。
现在我正试图这样做,当他们点击一个按钮时,他们会进入预览模式,在那里他们可以看到它在行动..所以当他们点击我添加javascript标签(用他们的javascript)在头部iframe ..这一切都很好!
但问题是当他们离开预览模式时,我删除了javascript标签,但是当我有这样的代码时:
$('#button').click(function()
{
alert("ok");
});
当我点击html按钮时(当不是在预览模式中时)它仍然会发出警报,这不应该发生!
似乎在删除javascript标签时,不会删除侦听器..或者我做错了吗?
现在我的问题:是否有一种方法可以使删除脚本标记时删除这些添加的eventlisterens?
AND YES:我知道您可以使用.off()删除事件处理程序,但由于我已经附加了事件处理程序,因此这些也将被删除,我不希望这样!
所以我可以考虑两个选项: - 重建整个iframe - 存储用户添加的事件处理程序,并在离开预览模式时删除它们。
提前致谢
答案 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/
答案 3 :(得分:0)
因为它不是jQuery,而且也不是jilla javascript,跟踪javascript更改会有太多工作,所以重建iframe将是最好的选择。