javascript - 使用 Javascript 动态添加 html 元素和事件处理程序

标签 javascript dom

我在表单中添加了 3 个 div 元素,并为每个元素动态添加了事件处理程序。它应该弹出一条消息,显示该 div 的 id。但是,无论我单击哪个框,它都会弹出最后一个 div 的 id,即 10175。

任何意见都将受到赞赏。

<html>
<head>
<style type="text/css">
  .empty
          {
            background-color: green;
          }
   .safebox
          {
        margin-left: auto;
        margin-right: 20px;
        margin-top: 20px;
        text-align: center;
        float: left;
        width: 60px;
        height: auto;
          }
</style>
 <script type="text/javascript">
    function ClickMe(elem){
        alert(elem.id);
    };

   window.onload=function(){
    var tempdiv = document.createElement('div');
    var text = document.createTextNode('0173');
    tempdiv.className='safebox empty';
    tempdiv.appendChild(text);
    tempdiv.setAttribute('id','10173');
    tempdiv.appendChild(text);
    document.getElementById('pagewarpper').appendChild(tempdiv);

    var currentdiv = document.getElementById('10173');
    if (currentdiv.addEventListener){
       currentdiv.addEventListener('click', function(){ClickMe(currentdiv);}, false);
    }
    else {
      currentdiv.attachEvent('onclick', function(){ClickMe(currentdiv);});
    }

    var tempdiv = document.createElement('div');
    var text = document.createTextNode('0174');
    tempdiv.className='safebox empty';
    tempdiv.appendChild(text);
    tempdiv.setAttribute('id','10174');
    tempdiv.appendChild(text);
    document.getElementById('pagewarpper').appendChild(tempdiv);

    var currentdiv = document.getElementById('10174');
    if (currentdiv.addEventListener){
       currentdiv.addEventListener('click', function(){ClickMe(currentdiv);}, false);
    }
    else {
      currentdiv.attachEvent('onclick', function(){ClickMe(currentdiv);});
    }

    var tempdiv = document.createElement('div');
    var text = document.createTextNode('0175');
    tempdiv.className='safebox empty';
    tempdiv.appendChild(text);
    tempdiv.setAttribute('id','10175');
    tempdiv.appendChild(text);
    document.getElementById('pagewarpper').appendChild(tempdiv);

    var currentdiv = document.getElementById('10175');
    if (currentdiv.addEventListener){
       currentdiv.addEventListener('click', function(){ClickMe(currentdiv);}, false);
    }
    else {
      currentdiv.attachEvent('onclick', function(){ClickMe(currentdiv);});
    }
      }
     </script>
   </header>
  <body>
 <form>
 <div id="pagewarpper">
</div>
  </form>
 </body>

最佳答案

尝试

ClickMe(this);

使用 currentDiv,您将创建一个闭包,它指向 3 个 div 的同一对象。最后一张。

关于javascript - 使用 Javascript 动态添加 html 元素和事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17845288/

相关文章:

sibling / child / parent 的 JQuery 选择器

java - 如何在 Java dom xml 解析中从我的节点解析中删除#text

javascript - 为什么 setInterval 会无限循环

javascript - 为什么所需的检查在日期选择器中不起作用?

javascript - promise 所有异步操作

Javascript new Date 将日期减少一天

javascript - jQuery 没有执行一个事件,而是执行了 4 个相同的事件

Jquery 撤消对 DOM 的最后更改

javascript - 无法从动态加载的 javascript 文件调用函数

javascript - 单击页面中的其他位置时将搜索恢复到其原始宽度?