innerHTML与button事件冲突解决办法

事情描述,我在body里面写了如下一个button
<body>
<input id="btn" type="button" value="自动生成V提高版本">
</body>

然后在js里面获取了这个button,然后给它添加点击事件

var btn = document.getElementById('btn');
 btn.onclick = function () {
 console.log(1);
 for (var i = 0; i < 5; i++) {
     html += '<div>' + i + '</div>';
   }
  document.body.innerHTML += html;
}

然而我要实现下面这样的功能,那我得重复点击这个按钮,but,当我完善完功能之后,发现我上面代码这只能点击一次,控台打印怎么点也只有一个1,好吧。。。。查了一下貌似document.body.innerHTML += html; 这句会导致这个body页面重新渲染,这样原来的DOM结构被覆盖了,之前DOM节点的绑定事件也就消失了,点不到之前那个button自然点击也就没反应了。

解决办法:

  如此那我就把这个点击事件用事件代理的方法放在body上,来看看,直接上代码

document.body.onclick = function (ev) {  
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
if(target.nodeName.toLowerCase() != 'input'){   //判断下点击的是我那个button,不是就什么也不做
    return;
}

这样就直接解决了问题了,当然,为了减少浏览器负担,我还是把生成div那用一个开关控制下只跑一次就不让它进来了

if(onOff == false){
  for (var i = 0; i < 5; i++) {
   html += '<div>' + i + '</div>';
  }
  document.body.innerHTML += html;
 onOff = true; 
}

猜你喜欢

转载自blog.csdn.net/xiangZHANG110/article/details/81071424
今日推荐