向动态创建的表中的单元格添加单击函数 - JavaScript
Adding a click function to cells in a dynamically created table - JavaScript
var tableData = document.getElementsByTagName("td");
for(var i = 0; i < tableData.length; i++){
var x = tableData[i];
x.addEventListener("click", fun1(x.textContent));
}
function fun1(y){
document.getElementById("testB").textContent = y;
}
我正在尝试为动态创建的表中的每个单元格添加一个单击功能(我无法知道表中有多少个单元格或它们的 id 是多少,但我只需要单元格中包含的文本)
我想用单元格的内容更新一个按钮,截至目前,它不会在单击时更新,而是将按钮更新为表格的最后一个值。
我对 JavaScript 相当陌生,感谢您提供的任何帮助。
这是我使用的解决方案,这要归功于下面提供的答案
var tables = document.getElementsByTagName("table");
for(var i = 0; i < tables.length; i++){
tables[i].addEventListener("click",
function(e) {
if(e.target && e.target.nodeName == "TD") {
fun1(e.target.textContent);
}
}
);
}
function fun1(y){
document.getElementById("testB").textContent = y;
}
我选择了这个解决方案,因为生成表的脚本不是我的,因此我不知道我想要的表的 ID 是什么,也不知道它实际创建了多少个表。
几乎可以肯定的是,如果所有(甚至许多)事件处理程序在单击时都应执行相同的操作,则几乎肯定不希望将事件处理程序单独添加到每个表单元格。
DOM 事件模型旨在支持委派,在这种情况下,这是一个更好的解决方案。简而言之:单个单元格不会对点击做出反应,但一些被认为是永久固定装置的祖先元素(例如,它们所在的<table>
)会检测细胞上的点击并适当地响应它们。
下面介绍如何设置委派:
document.getElementById("#mytable").addEventListener("click",
function(e) {
if(e.target && e.target.nodeName == "TD") {
fun1(e.target.textContent);
}
}
);
当然,你可以选择任何你想要的祖先元素,甚至是<body>
,如果这是必需的。另请注意,这种操作方式意味着即使将单元格添加到表或从表中删除单元格,您的代码也会按预期运行 - 您只需在页面初始化时执行此操作一次。
x.addEventListener("click", fun1(x.textContent));
这一行是你的问题 - addEventListener 查找函数引用,你只是在调用函数(它不返回函数)。将其包装在匿名函数中,或将值绑定到引用。
x.addEventListener("click", function() {
fun1(x.textContent)
}, false); //also a good idea to add the event bubbling boolean param
或者,ES6 箭头语法:
x.addEventListener("click", () => fun1(x.textContent), false);
相关文章:
- Javascript onclick函数会立即调用(而不是在单击时调用)
- Javascript在处理函数时防止单击
- JavaScript-onClick将按钮ID或单击按钮的文本传递给函数
- 使用单击函数中的jQuery切换元素
- 单击函数仅对某些数据名称执行
- 如何在单击、Knockout时传递函数中的值
- 如何创建背景图像列表'URL,并使用jQuery在单击函数时应用它们
- 运行“;非“;单击另一个函数中的函数仅一次
- 调用函数和单击动画
- 如何在单击组件时调用函数
- 单击从子函数返回父函数
- 调用函数单击选择标签中的选项
- jQuery 函数 - 单击两次返回一个值
- 模式弹出窗口无法正常工作,它多次调用函数 - 单击事件处理程序运行多次
- 在 JSON 解析中添加函数单击
- 调用多个函数单击“反应JS”
- 如何在使用javascript函数单击网格时设置文本框值
- 如何通过使用onClick()函数单击按钮来填充Javascript中的表
- 我如何添加多个值从一个选择列表框到另一个列表框上使用javascript函数单击按钮
- 手动触发函数单击事件对象