dom操作后Javascript无效

dom操作后Javascript无效,javascript,dom,Javascript,Dom,我的页面有两个依赖于JavaScript的组件。在左侧,有基于属性的导航(abn)。右边是abn的结果 abn有一个事件处理程序,结果有一个事件处理程序(两个都是单击时的) 每当用户单击abn时,我都会执行一个Ajax调用,返回一个JSON对象,其中HTML结果是键/值对之一的值。HTML正在插入到结果组件中 页面结果的事件处理程序在页面刷新时工作正常。当我在Ajax调用后将HTML内容插入结果槽时,它停止工作。我已经验证了结果包含JavaScript所依赖的所有div和类 我想当我替换HTML

我的页面有两个依赖于JavaScript的组件。在左侧,有基于属性的导航(abn)。右边是abn的结果

abn有一个事件处理程序,结果有一个事件处理程序(两个都是单击时的) 每当用户单击abn时,我都会执行一个Ajax调用,返回一个JSON对象,其中HTML结果是键/值对之一的值。HTML正在插入到结果组件中

页面结果的事件处理程序在页面刷新时工作正常。当我在Ajax调用后将HTML内容插入结果槽时,它停止工作。我已经验证了结果包含JavaScript所依赖的所有div和类


我想当我替换HTML内容时,JavaScript处理程序就停止工作了。有人能解释为什么会发生这种情况以及我如何解决这个问题吗?

您是否插入了具有相同id(重复id)的元素?

您如何替换结果的html内容?我的猜测是,在加载页面时定义了事件处理程序,但是您正在用一个没有事件处理程序的新dom元素覆盖dom元素。但在我了解更多之前,我必须先看一些代码或得到更多的解释:-)

它们是类,而不是div。它们具有相同的类。
事件处理程序不是结果的一部分。javascript位于页面底部,而结果位于顶部。所以javascript就在那里。它们不会被替换。

当您使用新数据更新HTML时,是否重新附加以前的事件处理程序


有可能您已经替换了以前有事件处理程序的元素,而现在没有。

我看到过类似的行为,即使用innerHTML操作DOM会破坏以前设置的事件处理程序,尽管只有在替换附加了处理程序的实际元素时才会这样做。对于内联事件处理程序属性,以及通过Javascript连接的“适当”事件处理程序,都是如此

测试是否发生这种情况的最佳方法是在单击abn时调用的函数中添加一些调试语句。如果您没有使用调试器,只需添加一些警报(然后研究如何使用JavaScript调试器)

第一次单击(有效)将向您发出警报。如果第二次单击(不起作用)跳过了警报,您就知道DOM操作正在删除事件处理程序

如果第二次单击仍然会发出警报,则说明发生了其他情况。最可能的罪魁祸首是一个未处理的Javascript异常,该异常正在停止执行。为您的浏览器(Firefox/Firebug、IE/Visual Studio Express Web Developer、Safari/Drosera)下载一个调试器,并遵循执行路径,直到抛出异常,或者到达应该进行DOM操作的代码部分。如果您访问的是后者,请检查所有变量的内容以及DOM的当前内容,以确定预期的DOM操作没有发生的原因


他们是班,不是班。他们有相同的班。事件处理程序不是结果的一部分。javascript位于页面底部,而结果位于顶部。所以javascript就在那里。他们没有被替换

如果您通过.innerHTML用新元素替换元素,则在执行此操作时,页面底部的JavaScript不会重新执行。如果您使用JavaScript(级别2)而不是html属性(级别0)添加事件处理程序,那么这些处理程序仅在用户首次访问页面时添加。每次在页面上放置新的DOM元素时,都需要调用该代码


当然,这个答案可能完全不正确。如果您给了我们一个代码示例,我们就知道了。

是的,让我们看看一些代码。。。测验很有趣,但不是在这里你能发一些代码吗?那会让我们帮你更容易。
function iAmCalledWhenSomeoneClicksOnAbn(){
    alert("I was called, w00t!");
    //...rest of function
}