javascript - javascript - 单击时获取按钮的正确值
问题描述
我正在尝试仅使用 javascript 的解决方案(没有 jQuery 或没有 HTML-JS),我在其中获取 DOM 元素的所有 childNode。然后我在每个子节点之后添加一个文本区域和一个按钮。
这是一个简化的代码片段:
var div = document.getElementById("abc");
var children = div.childNodes;
console.log(children[1])
var child;
for(var i=1; i < children.length; i++){
var input = document.createElement("textarea");
input.name = "post"+i;
children[i].appendChild(input); //add text area
var feedbackButton = document.createElement("button");
feedbackButton.innerHTML = "Send";
feedbackButton.classList.add("feedbackButton" + i);
children[i].appendChild(feedbackButton); //add button
}
feedbackButton.onclick = function() {myFunction(feedbackButton.getAttribute("class"))};
然后我的函数定义如下:
function myFunction(att) {
console.log('You Clicked: '+ att);
如果 for 循环迭代 5 次,无论按下什么按钮,控制台都会始终记录 feedbackButton5。我知道为什么会这样(因为它在 for 循环中并覆盖了值),但我正在寻找一种解决方案,让控制台记录正确的按下按钮的类名。
解决方案
用于const myFunction = button => () => console.log(button.getAttribute("class"))
创建myFunction
因此,您可以feedbackButton
在 for 循环中部分应用您的。它之所以有效,是因为您将其存储在函数范围内,而不是在调用时引用它。
<html>
<body>
<div id="abc">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<script>
const myFunction = button => () => console.log(button.getAttribute("class"));
var div = document.getElementById("abc");
var children = div.children;
for(var i=0; i < children.length; i++){
var input = document.createElement("textarea");
input.name = "post"+i;
children[i].appendChild(input);
var feedbackButton = document.createElement("button");
feedbackButton.innerHTML = "Send";
feedbackButton.classList.add("feedbackButton" + i);
children[i].appendChild(feedbackButton);
feedbackButton.onclick = myFunction(feedbackButton);
}
</script>
</body>
</html
推荐阅读
- c# - C# WinForms 帮助实现 BackgroundWorker 和加载表单
- excel - 覆盖单元格excel VBA的重新格式化
- python - 如何表示用于神经网络的音频文件?
- excel - 将数据从一张纸转移到另一张纸
- python - 使用“tarfile”时跳过损坏的档案 (.tar.gz)
- python - 如何解决串行通信中的绘图问题?
- c++ - 不能将变量声明为类的抽象
- python - 为什么可以使用类型在 Python 上的 int 类型变量上存储 str 值
- ios - React-Native Audio 无法在 IOS 模拟器上播放(OSStatus 错误 2003334207)
- javascript - 使用Axios CDN在Vue Template中展示