Javascript:未捕获的TypeError:不是函数

Javascript: Uncaught TypeError: not a function

我正在建立一个使用以下代码的网站:

HTML:

1
<button type="button" id="hidePopup" onclick="hidePopup()">Cancel</button>

Javascript:

1
2
3
4
5
6
7
8
9
function linkPopup(questionNumber) {
        document.getElementById('linkPopup').style.display = 'block';
        document.getElementById('addLink').setAttribute('onclick', 'addLink(' + questionNumber + ')');
    }

    function hidePopup() {
        document.getElementById('linkPopup').style.display = 'none';
        document.getElementById('overlay').style.display = 'none';
    }

出于某种原因,我在Chrome的开发工具中得到以下错误:

Uncaught TypeError: hidePopup is not a function

这个问题的路径是什么?我怎样才能防止将来发生这种情况?


问题是,id='hidePopup'hidePopup()有冲突,因为它们的名称相同。

解决方案是将ID更改为除"hidePopup"之外的其他内容。


1
id="hidePopup" onclick="hidePopup()"

元素ID与函数名冲突。

为了避免这种情况:

  • 避免全局。(将函数包装在立即调用的函数表达式(IIFE)中,或者包装在传递给事件处理程序(如LOAD或DOM READY)的函数中)。
  • 使用javascript(例如addEventListener()或jquery的on()将事件处理程序绑定到元素,而不是使用内部事件属性。