我正忙于动态地为某些按钮分配函数,我遇到了一个奇怪的问题,我完全被它难住了。
为了演示,我有以下简单的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);
}
分别地,它们都工作得很好,但是我很难在bind函数中传递事件参数。
我试图将两者结合起来,以便调用一个可以同时接收事件和参数的函数
更新
这似乎是一个可能的解决办法,尽管我不知道如何诚实
同一个循环
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);
}