我在javascript中没有很多知识,所以我不知道这里有什么问题, 我在js中动态创建div,每个div在单击时调用一个函数,但函数没有被重新识别。这是代码的一部分
for (......) {
var listatema = document.createElement("div");
listatema.innerHTML += "<a href='javascript: void(0)' onClick='functest(" + pag + ")'>" + temat + "</a>";
document.getElementById('menu').appendChild(listatema);}
}
“tema”是一个文本,函数“functest”有一个参数“pag [aux]”,这是一个数字。
功能是:
function functest(arg){
console.log(arg)
}
我尝试的其他替代方案是改变:onClick='"+ functest(pag) +"'
:
我改变了引号“”的位置并且功能正常工作但是在页面加载时执行,它不等待点击。
答案 0 :(得分:1)
如果您正在执行以下操作,您的代码应该有效:
function functest(arg) {
console.log(arg);
}
for (var i = 0; i < 10; i++) {
var listatema = document.createElement("div");
listatema.innerHTML += "<a href='javascript: void(0)' onClick='functest(" + i + ")'>" + i + "</a>";
document.getElementById('menu').appendChild(listatema);
}
&#13;
<div id="menu"></div>
&#13;
但是,我建议使用addEventListener
或在文档元素对象上设置onClick
处理程序,而不是设置innerHTML。请注意,建议不要设置innerHTML,尤其是在呈现用户输入时。见https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML#Security_considerations。在你的情况下,它可能不是一个真正的问题,但如果可以的话,避免它是好的做法:)
for (var i = 0; i < 5; i++) {
var wrapper = document.createElement("div");
var listatema = document.createElement("a");
listatema.textContent = i;
listatema.href = "javascript:void(0)";
listatema.addEventListener('click', function(e) {
console.log(this.i);
}.bind({ i : i }));
wrapper.appendChild(listatema);
document.getElementById('menu').appendChild(wrapper);
}
&#13;
<div id="menu"></div>
&#13;
答案 1 :(得分:0)
onClick='functest(\""+ pag +"\")'
你忘了引用参数。