2017-01-20 151 views
2

我没有很多知识在JavaScript中,所以我不知道这里有什么问题, 我在js中动态创建div,每个div在被点击时调用一个函数,但函数是没有被识别。这是代码Javascript功能不被识别

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) +"'

我改变的引号“”的位置和功能的工作不错,但在执行时,页面已加载,它不会等待点击。

回答

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); 
 
}
<div id="menu"></div>

我会,但是,建议使用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); 
 
}
<div id="menu"></div>

+0

我一直令人头大我的脑子在这一个,而测试JSFiddle上的类似解决方案。真正有趣的是,您的** first **解决方案在您的代码片段中完美地适用于我,但告诉我该功能在JSFiddle上未定义。我已经完全复制了你的代码。任何想法,为什么会这样? [小提琴](https://jsfiddle.net/Obsidian_Age/yrL8ybgm/)。你的第二个解决方案似乎在两个位置都可以正常工作:) –

+1

这很可能是如何在jsFiddle中注入脚本的。我认为这是因为它们将函数封装在'onLoad'处理程序中,所以它不会被挂载到全局范围。如果您在HTML中添加嵌入式脚本,它应该可以工作 - https://jsfiddle.net/msindwan/yrL8ybgm/1/。 –

+0

这似乎是它!感谢您的澄清:)虽然我不是那个问这个问题的人,但对于我指出JSFiddle的有限范围来说,您仍然是一个巨大的帮助。我已经提出了你的答案,但希望我可以授予你一些代表你的评论以及;) –

0
onClick='functest(\""+ pag +"\")' 

你忘了引用参数。