【发布时间】:2019-07-01 22:23:12
【问题描述】:
我正忙于尝试为某些按钮动态分配功能,但遇到了一个让我非常困惑的奇怪问题。
我有以下简单的 HTML 用于演示目的
<div id="butts">
<button>BUTT 01</button>
<button>BUTT 02</button>
</div>
现在我正在使用带有以下循环(包括事件)的 JavaScript 为这些按钮分配功能
var butts = $("#butts").find("button");
for(var cnt = 0; cnt < butts.length; cnt ++) {
// get button description just for testing
var buttonDesc = $(butts[cnt]).text();
// EVENT
butts[cnt].addEventListener (
"click", function(event) {
funcEvent(event)
}
);
}
调用一个非常简单的测试函数来验证它是否工作
function funcEvent(event) {
console.log("funcEvent");
console.log(event);
}
这工作正常,但我还需要将一个变量传递给我通常会执行如下操作的函数
var butts = $("#butts").find("button");
for(var cnt = 0; cnt < butts.length; cnt ++) {
// get button description just for testing
var buttonDesc = $(butts[cnt]).text();
// BIND
butts[cnt].addEventListener (
"click", funcBind.bind(this, buttonDesc)
);
}
另一个非常简单的测试函数
function funcBind(buttonDesc) {
console.log("funcBind");
console.log(buttonDesc);
}
分别他们都工作得很好,但我很难在绑定函数中传递事件参数
我正在尝试将两者结合起来,以便我可以调用一个可以同时接收事件和参数的函数
更新
这似乎是一个可能的解决方案,虽然我不明白如何诚实
同一个循环
var butts = $("#butts").find("button");
for(var cnt = 0; cnt < butts.length; cnt ++) {
// get button description just for testing
// using var did not work (always last element of array)
// var buttonDesc = $(butts[cnt]).text();
let buttonDesc = $(butts[cnt]).text();
// EVENT
butts[cnt].addEventListener (
"click", function(event) {
funcEventBind(event, buttonDesc);
}
);
}
调用一个非常简单的测试函数来验证它是否工作
function funcBindEvent(event, buttonDesc) {
console.log("funcEvent");
console.log(event);
console.log(buttonDesc);
}
【问题讨论】:
标签: javascript scope arguments actionlistener