javascript - 为什么我的 'click' addEventListener 在页面加载时被调用

标签 javascript jquery callback event-handling addeventlistener

我有一个 id #login 的按钮和一个包含以下行的 javascript 文件:

document.getElementById('login').addEventListener('click', 'LoginPressed()')

作为测试,我做了这个功能:

function LoginPressed(){
  console.log('was login pressed already??')
}

每次页面加载时我的函数都会被调用。我该如何阻止这种情况发生?

注意,我也尝试过不使用引号的回调,也不将其作为函数:

document.getElementById('login').addEventListener('click', LoginPressed())
document.getElementById('login').addEventListener('click', LoginPressed)
document.getElementById('login').addEventListener('click', 'LoginPressed')

最佳答案

因为您调用它,而不是引用它。

这个:

 document.getElementById('login').addEventListener('click', 'LoginPressed()');

应该是这样的:

 document.getElementById('login').addEventListener('click', LoginPressed);

LoginPressed 后面不应该有括号,因为您只想引用该函数,以便知道这是稍后要调用的函数。有了括号,您就可以立即调用它。

LoginPressed 周围也不应该有引号,因为这是函数的实际名称。有了引号,JavaScript 运行时将无法正确识别该函数。

这是您的代码,已正确编写并正常工作(请注意,在单击按钮之前控制台消息不会出现):

document.getElementById('login').addEventListener('click', LoginPressed)

function LoginPressed(){
  console.log('was login pressed already??')
}
<button id="login">Click Me</button>

关于javascript - 为什么我的 'click' addEventListener 在页面加载时被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40441284/

相关文章:

c++ - 如何做一个简单的C++通用回调?

javascript - 单击另一个页面时 Navbar Active 不会改变

javascript - CSS - 使卡片盒比实际更大

javascript - 根据数组检查单选按钮

jquery - iOS Safari Mobile 图像 map - 单击时区域显示框

javascript - Flexslider 在鼠标悬停时恢复幻灯片放映

javascript - 使用 Flowplayer 自动重复或如何在 javascript 中将回调作为字符串传递

javascript - jConfirm 不等待用户响应

javascript - Jasmine 2.0 无法设置回调时的异步测试

c# - 如果(值==空)与如果(空==值)