删除使用eval添加的事件侦听器

时间:2010-07-11 21:19:45

标签: javascript eval

我会尽力解释我能做的最好的事情......

我有一个页面,我们称之为pageA。当在该页面上单击按钮时,将发出ajax请求,并且返回数据为eval()'d。该数据显然包含javascript代码。此代码可能包含在评估时添加到pageA的事件侦听器。像jquery $('body')的东西。例如click()。

当再次单击pageA上的按钮时,是否有一个函数或某些东西可以删除该eval上添加的所有事件监听器和数据。

在我评估数据之前,我正在将从ajax调用返回的所有数据捕获到变量中,那么有没有办法只执行$(data).remove()并让所有事件侦听器和数据神奇地消失?

使用eval数据,它并没有真正添加到页面本身,我可以在页面上删除文本并让我的所有问题都消失,但事件监听器肯定会留下来。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

我将放弃关于eval的邪恶的演讲,并建议你尝试在jQuery中命名事件。

http://docs.jquery.com/Namespaced_Events

例如,数据中的代码是否可以使用命名空间添加所有新事件:

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

当你想删除它时,你只需要$(node).unbind("click.myNameSpace"),当然,假设你知道它们被添加到了哪些元素。如果您不知道添加的事件类型,您也可以执行$(node).unbind(".myNameSpace"),它将删除命名空间下的所有事件。

答案 1 :(得分:0)

eval返回的javascript之前,可能更容易在特定按钮上复制所有当前连接的事件处理程序。然后取消绑定所有事件(eval可以添加额外的处理程序)并重新绑定之前的事件。

编辑:看起来有人已经有类似的问题:jQuery: Unbind event handlers to bind them again later(虽然它使用的是jQuery)。

我忍不住问,你不能控制返回的JS吗?因为如果你这样做,最好确保从不发送恶意内容。