for(let i = 0; i < row.length; i++){
let ref_num = row[i].getElementsByTagName('th')[0].innerText;
row[i].getElementsByTagName('th')[0].innerHTML = "<button onclick=generateProcessLogQuery(this.value)>"+ref_num+"</button>"
console.log("Ref Number : ",ref_num);
}
function generateProcessLogQuery(refresh){
console.log("Hrere : ",refresh)
}
我得到了:
未捕获的ReferenceError:未定义generateProcessLogQuery
但你可以看到它被定义了。
答案 0 :(得分:4)
虽然它是在您向我们展示的代码片段中定义的,但它并未在onclick
函数最终运行的范围内定义。
通过将字符串拼接在一起,不要生成嵌套在HTML中的JS。
使用DOM。这使您可以保留参考和范围。
let button = document.createElement("button");
button.addEventListener("click", function (event) {
generateProcessLogQuery(this.value);
});
button.appendChild(document.createTextNode(ref_num);
row[i].getElementsByTagName('th')[0].appendChild(button);
注意:在没有值属性的情况下,在您定义的按钮上使用this.value
是很奇怪的。
答案 1 :(得分:1)
我遇到了类似的事情;就我而言,我已经准备好在文档内部定义的功能。
$(document).ready(function() {
// function was here and should not have been to call from HTML
});