javascript - 动态创建表的 addEventListener 方法

标签 javascript css html-table

我是 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>

最佳答案

您必须了解一个事实,即您作为参数提供给 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/

干杯

弗洛里安

关于javascript - 动态创建表的 addEventListener 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21921258/

相关文章:

javascript - 根据屏幕大小更改列数

javascript - 设置元素的 margin-left 和 width 以匹配另一个元素的 margin 和 size

javascript - 如何使用 JavaScript 启用 IE9 中的工具栏?

javascript - 带有谷歌地图标签的标记没有事件目标

Javascript 计时器在单击开始之前已经运行

c# - CSS + jQuery - 无法执行 .toggle() 并重复 jQueryTemplate Item [我必须警告你这有点让人不知所措]

html - 如何垂直对齐标签和文本字段?

html - 无法在可滚动表中对齐 thead 和 tbody

HTML/CSS - 创建论坛 - 任何动态缩进 tr 的方法?

html - 在具有两个标题的表格中,主标题不会在滚动时保持粘性