我是addEventListener
方法的新手。我试图在动态创建的js表上使用onClick
事件来更改单元格值,但是当我将addeventlistener
代码行放在函数中时,表就会消失。我试图给每个单元格一个动态id。然后使用这些代码行添加addeventlistener
方法:
s.setAttribute('id',"tab"+v);
document.getElementById("tab"+v).addEventListeners("click",function(){var g=document.getElementById("tab"+v);
g.innerHTML="changed";},false);
v++;
任何人都可以向我解释如何解决这个问题?
<html>
<head>
<title>table dynamic</title>
<style>
*{margin:0px;padding:0px;}
.tableShape{
width:300px;
height:300px;
font-size:30px;
text-align:centre;
color:red;
border:1px solid red;
}
.rowShape{height:33%;width:33%;border:1px solid black;}
</style>
</head>
<body>
<script>
var i,j,v=1;
var arr=new Array(3);
for(i=0;i<3;i++){
arr[i]=new Array(3);
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
arr[i][j]=1;
}}
function tabs(){
var k,t;
var m=document.createElement("table");
m.setAttribute('class',"tableShape");
for(var k = 0;k < 3; k++){
var p=m.insertRow(k);
for( var t = 0;t < 3; t++){
var s=p.insertCell(t);
s.setAttribute('class',"rowShape");
s.innerHTML+=arr[k][t];
s.setAttribute('id',"tab"+v);
document.getElementById("tab"+v).addEventListeners("click",function(){var g=document.getElementById("tab"+v);
g.innerHTML="changed";},false);
v++;
}
}
document.body.appendChild(m);
}
window.onLoad=tabs();
</script>
</body>
</html>
答案 0 :(得分:2)
你必须要注意这样一个事实,即你在事件发生时首先评估你作为addEventListener()参数给出的回调函数 - 所以它取值“v”。 你需要的是v值的本地副本 - 你可以通过一个闭包实现这一点,如下所示:
s.setAttribute('id', "tab" + v);
document.getElementById("tab" + v).addEventListeners("click", (function(val) {
return function() {
var g = document.getElementById("tab" + val);
g.innerHTML = "changed";
};
})(v), false);
v++;
您可以在此处找到一个简单的示例闭包:http://jsfiddle.net/9JAG2/
干杯
弗洛里安