javascript - JS多个按钮绑定同一个事件无法生效
伊谢尔伦
伊谢尔伦 2017-04-11 09:47:17
[JavaScript讨论组]

1.通过循环为多个生成的按钮绑定同一事件,按钮绑定事件无法生效

2.代码:

<!DOCTYPE>
<html>
  <head>
    <meta charset="utf-8">
    <title>IFE JavaScript Task 01</title>
  </head>
<body>
  <p>
    <label>城市名称:<input id="aqi-city-input" type="text"></label><br>
    <label>空气质量指数:<input id="aqi-value-input" type="text"></label><br>
    <button id="add-btn" onclick="addBtnHandle()">确认添加</button>
  </p>
  <table id="aqi-table">
  </table>
 <script type="text/javascript">

var aqiData = [];

function addAqiData() {
    //获得城市和空气质量输入框值
    var city = document.getElementById("aqi-city-input").value;
    var num = document.getElementById("aqi-value-input").value;
    aqiData.push([city,num]);
    var ElementTable = document.getElementById("aqi-table")
    var ElementTr = document.createElement("tr");
    var ElementTdCity = document.createElement("td");
    var ElementTdNum = document.createElement("td");
    var ElementTdBtn = document.createElement("button");
    ElementTr.appendChild(ElementTdCity);
    ElementTr.appendChild(ElementTdNum);
    ElementTr.appendChild(ElementTdBtn);
    ElementTable.appendChild(ElementTr);
    var trLast = ElementTable.lastElementChild;
    trLast.children[0].innerHTML = city;
    trLast.children[1].innerHTML = num;
    trLast.children[2].innerHTML = "删除";
}

function renderAqiList() {
  //判断是否是第一个添加
  var ElementTable = document.getElementById("aqi-table");
  var ElementTableLength = ElementTable.childElementCount;
  if (ElementTableLength===0) {
    var ElementTr = document.createElement("tr");
    var ElementTdCity = document.createElement("td");
    var ElementTdNum = document.createElement("td");
    var ElementTdBtn = document.createElement("td");
    ElementTr.appendChild(ElementTdCity);
    ElementTr.appendChild(ElementTdNum);
    ElementTr.appendChild(ElementTdBtn);
    ElementTable.appendChild(ElementTr);
    var trFirst = ElementTable.getElementsByTagName("tr")[0];
    trFirst.children[0].innerHTML="城市";
    trFirst.children[1].innerHTML="空气质量指数";
    trFirst.children[2].innerHTML="操作";
  } 
}

function addBtnHandle() {
  renderAqiList();
  addAqiData();
  var ElementTable = document.getElementById("aqi-table");
  var ElementTableLength = ElementTable.childElementCount;
  alert(ElementTableLength);
  
  for (var i = 1; i < ElementTableLength; i++) {
      ElementTable.getElementsByTagName("tr")[i].lastElementChild.onclick = function () {
        aler("测试")
      };
      }
  }


</script>
</body>
</html>
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(4)
高洛峰

你alert写错了

aler("测试")
巴扎黑

你是要给每个内容是删除的td绑定绑定删除本行的事件吗?建议可以直接绑定在table上,这样绑一个事件就行了,根据事件传播机智,判断e.target||e.srcElement是不是你要点的那个td就行,如果是的话就删除它对应的行。
简单写一点


var oTable=document.getElementById('yourTable');
oTable.addEventListener('click',function(e){
    e.target=e.target||e.srcElement;
    if(e.target.nodeType===1&&e.target.nodeName==='TD'&&e.target.innerHTML==='删除'){
        //删除该行 blablabla.....
    }
})

代码是我直接敲的,你放到ide里改改,大概是这个意思。

天蓬老师

你的代码逻辑没有问题, 是你的粗心导致alert函数写错了.
请将for循环里的aler("测试")改为alert("测试")


另外,你的文档第一行没有文档名,应把<!DOCTYPE>改为<!DOCTYPE html>

巴扎黑

aler("测试")改为alert("测试")

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号