Uncaught TypeError:链接不是HTMLButtonElement.onclick上的函数

时间:2018-10-13 19:35:32

标签: javascript html error-handling

这是一个非常奇怪错误。 HTML认为该函数未定义,我该如何解决?这是代码:

<button id="links" onclick="links()">Links</button>
    <script>function links(){document.location = ("links.html")}</script>

2 个答案:

答案 0 :(得分:3)

问题在于document.links 已经存在,并且对全局document上项目的隐式引用将优先于全局window上的隐式引用。也就是说,如果document.<something>存在并且window.<something>存在,那么如果您仅使用<something>,则解释器将首先检查您使用的名称是否存在于{{1} },然后再检查document中是否存在您使用的名称。 (您的window 功能位于links上)

  

“文档”界面的window.links只读属性返回文档中所有元素的集合以及具有href属性值的元素。

links

要么引用<button id="links" onclick="console.log(links === document.links); links();">text content</button> <script> function links() { document.location = ("links.html") } </script>,要么引用window.links,而默认为links

document.links

或者最好使用Javascript正确附加处理程序;内联处理程序需要污染全球范围,并且无论如何通常被认为是非常糟糕的做法:

<button id="links" onclick="window.links();">text content</button>
<script>
function links() {
  document.location = ("links.html")
}
</script>
document.querySelector('#links').addEventListener('click', () => {
  document.location = "links.html";
});

答案 1 :(得分:-2)

那是因为您正在立即调用函数。尝试通过以下方式更改代码:

<button id="links" onclick="links">Links</button>
<script>function links(){document.location = ("links.html")}</script>