javascript - 使用JS事件委托无法生效

查看:86
本文介绍了javascript - 使用JS事件委托无法生效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

1.使用事件委托只能生效一次,后续点击没反应,再次点击左侧添加或者右侧添加无任何报错也没有任何反应

2.代码:

<!DOCTYPE html>
<html>
<head>
  <title>js6</title>
  <meta charset="utf-8">
  <style type="text/css">
    p {
      display: inline-block;
      color: #fff;
      background-color: red;
      margin: 0 5px;
      padding: 5px;
    }
  </style>
</head>
<body>
<div id="father">
<input id="num-input" type="text" name="inputBox">
<button id="add-left" type="button" >左侧添加</button>
<button id="add-right" type="button" >右侧添加</button>
<button id="del-left" type="button" >左侧删除</button>
<button id="del-right" type="button" >右侧删除</button>
</div>
<div id="content">
</div>
<script>

  var cont = document.getElementById("content");
  var num = document.getElementById("num-input");
  var fadiv = document.getElementById("father");
  var createEle = document.createElement("p");
  var inputText = num.value;
  var createText = document.createTextNode(inputText);
  fadiv.onclick = function (e) {
    var e = e || window.e;
    var target = e.target || e.srcElement;
    if (target.nodeName.toLowerCase() == "button") {
      switch(target.id){
        case "add-left" :
          createEle.appendChild(createText);
          var firstNode = cont.firstElementChild;
          cont.insertBefore(createEle,firstNode);
          break;
        case "add-right" :
          createEle.appendChild(createText);
          var firstNode = cont.firstElementChild;
          cont.appendChild(createEle);
          break;
        case "del-left" :
          var firstNode = cont.firstElementChild;
          cont.removeChild(firstNode);
          break;
        case "del-right" :
          var lastNode = cont.lastElementChild;
          cont.removeChild(lastNode);
          break;
      }

    }
  }

</script>
</body>
</html>

解决方案

你创建的这些元素都在onclick外面,那元素就创建一次啊,一直append、insert同一个元素当然看起来是『没反应』的,你可以把创建元素的这些代码移到onClick里面就行啦

var createEle = document.createElement("p");
var inputText = num.value;
var createText = document.createTextNode(inputText);

这篇关于javascript - 使用JS事件委托无法生效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆