未捕获的ReferenceError:函数未定义但已定义

时间:2018-05-30 11:53:48

标签: javascript google-chrome-extension

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

但你可以看到它被定义了。

2 个答案:

答案 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
});