事件监听器不在锚点上工作

ari*_*nmz 1 javascript anchor

这可能是一个非常愚蠢的问题,但我现在很绝望.我正在尝试通过单击这样的锚来执行javascript函数:

<head>
<script type="text/javascript">
    function myFunction() {
        alert('It was clicked');
    }
    Anchor.addEventListener('click', myFunction, false);
</script>
</head>
…
<a href="#" id="Anchor">Click me</a>
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

但是,这很好用:

<a href="javascript:myFunction()" id="Anchor">Click me</a>
Run Code Online (Sandbox Code Playgroud)

即使这样做:

<a href="#" onclick="myFunction()" id="Anchor">Click me</a>
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法?我究竟做错了什么?比如这里jsfiddle.

额外信息:

我已经使用相同的方法设置了其他事件,但不知何故,锚是唯一不起作用的.例:

<script type="text/javascript">
    function aFunction() {
        AnElement.style.display = 'none';
    }
    window.addEventListener('load', aFunction, false);
</script>
Run Code Online (Sandbox Code Playgroud)

窗口加载完成后,元素完全隐藏.

Cla*_*edi 8

问题是你将脚本放在HEAD部分上.Anchor脚本执行时不存在,因此你得到了Anchor is not defined.

试试这个将脚本放在html定义之后的修改版本.

DEMO

<a href="#" id="Anchor">Click me</a>
<script>
    function myFunction() {
        alert('It was clicked');
    }
    Anchor.addEventListener('click', myFunction, false);
</script>
Run Code Online (Sandbox Code Playgroud)

  • @arielnmz 脚本在加载文档时一遇到它们就会执行。这允许诸如“document.write()”之类的东西在文档中出现脚本的位置生成 HTML。 (2认同)

小智 5

你应该在页面加载事件之后添加你的绑定,并使用 getElementById。

function myFunction() {
    alert('It was clicked');
}
window.onload = function () {
    document.getElementById('Anchor').addEventListener('click', myFunction, false);
}
Run Code Online (Sandbox Code Playgroud)