我有一个问题,试图找出为什么我的动态添加的onclick事件没有做任何事情。我已经搜索了很多网站,但我没有尝试过任何工作。知道自己这可能是某种愚蠢的错误,但我真的想知道我做错了什么。这是我的代码的一部分,包括相关功能:
function ChangeNumber(line){ //this is just a test function so far :)
document.getElementById('maincol').innerHTML += line + "<br/>"; //just adds "something to the end of a div"
}
function ChangeSize()
{
var rows, cols;
rows = document.getElementById('rows').value;
cols = document.getElementById('cols').value;
var tbody = document.getElementById('model');
tbody.innerHTML = "";
for (var i = 0; i < rows; i++){
var tr = document.createElement('tr');
for (var j = 0; j < cols; j++){
var td = document.createElement('td');
td.setAttribute('name', (i * cols) + (j + 1));
td.onclick = function() {ChangeNumber('something'); };
td.innerHTML = "0";
tr.appendChild(td);
}
tbody.appendChild(tr);
}
}
表的创建工作正常,因此从静态创建的onclick调用函数ChangeNumber()
,但是当我点击动态创建的td时,没有任何反应。有人可以向我澄清问题吗?
答案 0 :(得分:1)
快速JSFiddle显示basic approach is fine - 至少在Chromium中。
tbody_x = document.getElementById('x');
tbody_x.innerHTML = '';
for (row = 0; row < 5; row++)
{
tr = document.createElement('tr');
for (col = 0; col < 10; col++)
{
td = document.createElement('td');
td.setAttribute('name', 'r' + row + 'c' + col);
td.onclick = function() { ChangeNumber('hi'); };
td.innerHTML = '0';
tr.appendChild(td);
}
tbody_x.appendChild(tr);
}
必须打破其他一些东西。 (尝试启动Firebug或类似功能,并在控制台中查找JS错误。)
答案 1 :(得分:1)
你也可以使用:
td.onclick = ChangeNumber;
ChangeNumber
是一个也可以绑定到点击的函数,如果你把这个函数放在里面,你可以为每个onclick创建一个自定义函数。
我知道他面临的问题只是onclick函数不会弹出,它没有显示任何日志,如果你使用td.onclick = ChangeNumber();
那么它只会在加载这个脚本时触发一次这个函数,< / p>
答案 2 :(得分:0)
您必须将onclick
设置为属性。所以,而不是
td.onclick = function() {ChangeNumber('something'); };
你会想要像
这样的东西
td.setAttribute('onclick', "function() {ChangeNumber('something');}");
答案 3 :(得分:0)
创建HTML元素时,必须使用setAttribute来设置它。另外,你必须把它变成一个字符串。
所以,比如:
td.setAttribute('onclick', 'function(){change("Something")}');
或者,你可以这样说:
td.setAttribute('onclick', 'changeSomething();');
然后在全局对象的某处定义脚本,如下所示:
changeSomething = function() {
// do the change
}
第三个选项是使用事件库。然后你就可以做类似的事情:
Event.on(td, 'click', changeSomething);
查看this question以查看我的意思。
P.S。它超出了这个问题的范围,但最好不要绑定全局对象的东西。使用模块或其他东西。
答案 4 :(得分:0)
你的方法似乎很好,请在这里找到: (jsfiddle.net/fa9SV /)
请交叉检查文档中是否存在所有ID。希望这有帮助!