我正在尝试在网页上安装一个鼠标点击处理程序。数据处理程序函数有一个部分可以像这样修改函数体:
document.body.innerHTML+='<div class=... id=...>X</div>'
添加后,click处理程序不再工作,需要重新连接。如何解决这个问题,而不用每次(some_condition)为真时都重新连接函数?
下面是我的main.js(为了清楚起见,省略了一些行):
function parsenodes(data,ioargs){
// IE does not supprt forEach method
//data.forEach(function(item){
dojo.forEach(data,function(item){
//do something
if(some_condifition)
document.body.innerHTML+='<div class="some_class" id="unique_id">X</div>';
});
}
var postData = function(){
dojo.xhrPost({
//url: "/ajax/get_messages",
url: "/dbnode.json",
handleAs: "json",
load:parsenodes
});
};
function doUpdate()
{
postData();
setTimeout(doUpdate,1000);
}
function on_img_mb_down()
{
alert("mouse clicked");
}
function init()
{
console.debug("installing handler");
//$('#resim').click(function() {alert("obarey")});
handle = dojo.connect(dojo.byId("resim"),'onclick',on_img_mb_down);
console.debug(handle);
doUpdate();
}
dojo.ready(init);
//$(document).ready(init);
addendum:id为“resim”的锚是一个静态HTML元素:
<body>
<a id="resim" style="border:1px;" ><img id="worldpng" src="world.png" /></a>
</body>
1条答案
按热度按时间vmdwslir1#
当您更改
.innerHTML
时,其中的所有元素都将从更新的HTML中销毁/重新创建,丢失click
处理程序等。请使用DOM方法附加内容,而不是这样做:用这样的方式:
只有当
ready
上的元素存在 then 时,才需要装配处理程序,假设ID没有重复(这是一个单独的问题......如果是这种情况,则切换到一个类),您只需要执行以下操作:在
parsenodes
方法中,新元素加载完成后......因为当它们被替换时,它们的click
处理程序会被破坏,所以需要在新元素上重新创建它们。