Javascript 更新HTML正文时JQuery/Dojo单击处理异常

Javascript 更新HTML正文时JQuery/Dojo单击处理异常,javascript,jquery,html,dojo,dom-events,Javascript,Jquery,Html,Dojo,Dom Events,我正在尝试在我的网页程序上安装鼠标点击处理程序。 数据处理程序函数有一个修改主体的部分,如下所示: document.body.innerHTML+='<div class=... id=...>X</div>' dojo.query("body").append("<div class="some_class" id="unique_id">X</div>"); document.body.innerHTML+='X' 添加后,单击处理程序

我正在尝试在我的网页程序上安装鼠标点击处理程序。 数据处理程序函数有一个修改主体的部分,如下所示:

document.body.innerHTML+='<div class=... id=...>X</div>'
dojo.query("body").append("<div class="some_class" id="unique_id">X</div>");
document.body.innerHTML+='X'
添加后,单击处理程序不再工作,需要重新连接。 每次(某些条件)为真时,如何在不重新连接函数的情况下解决此问题

以下是我的main.js(为了清晰起见,省略了一些行):

函数解析节点(数据、ioargs){
//IE不支持forEach方法
//data.forEach(功能(项){
forEach(数据、函数(项){
//做点什么
如果(某些条件)
document.body.innerHTML+='X';
});
}
var postData=函数(){
dojo.xhrPost({
//url:“/ajax/get_messages”,
url:“/dbnode.json”,
handleAs:“json”,
加载:解析节点
});
};
函数doUpdate()
{
postData();
setTimeout(doUpdate,1000);
}
函数on_img_mb_down()
{
警报(“鼠标点击”);
}
函数init()
{
调试(“安装处理程序”);
//$('#resim')。单击(函数(){alert(“obarey”)});
handle=dojo.connect(dojo.byId(“resim”),“onclick”,on\u img\u mb\u down);
调试(句柄);
doUpdate();
}
dojo.ready(init);
//$(文件).ready(初始化);
附录:id为“resim”的锚点是一个静态HTML元素:

<body>
    <a id="resim" style="border:1px;" ><img id="worldpng" src="world.png" /></a> 
</body>

更新问题:

当您更改
.innerHTML
时,其中的所有元素都将从更新的HTML中销毁/重新创建,丢失
单击
处理程序等。与其这样做,不如使用DOM方法附加内容,而不是这样做:

document.body.innerHTML+='<div class="some_class" id="unique_id">X</div>';

在您的
parsenodes
方法中,在新元素加载完成后…因为当它们被替换时,它们的
click
处理程序会被破坏,您需要在新元素上重新创建它们。

此外,事件名称是
click
,而不是
clicked
@Justin-或
onclick
,但我假定为he在这里触发了一个自定义事件,我想不是…正在更新id为“resim”的ancher是一个单一的、静态的HTML元素,所以这不是问题所在。或者我没有明白你的意思吗?@Atilla-如果不是这样,那么你对问题的描述要么是不正确的,要么是误导性的,你说如果ajax失败,它会起作用,例如,没有更改,对吗?@Nick:是的,这是正确的。是的,我的描述看起来很混乱、更新(或删除)很快就会来。
dojo.query("body").append("<div class="some_class" id="unique_id">X</div>");
dojo.connect(dojo.byId("resim"),'click',on_img_mb_down);