JavaScript addEventListener 函数语法

标签 javascript function syntax addeventlistener

我无法理解为什么事件监听器的函数参数不只接受函数。这是代码:

声明变量:

var spanJS = document.getElementById("spanJS")
var txtPlayers = document.getElementById("ContentPlaceHolder1_txtPlayers")
var txtAmount = document.getElementById("ContentPlaceHolder1_txtAmount")

然后关联事件监听器:

txtAmount.addEventListener("keyup", UpdateTotals())
txtPlayers.addEventListener("keyup", UpdateTotals())

然后是函数:

function UpdateTotals() {
      ... 
}

这是完整的代码。问题是,当我运行它时,它会在没有任何 keyup 事件的情况下执行 UpdateTotals(),并且监听器不工作。

如果我进行以下更改,它会按预期工作:

txtAmount.addEventListener("keyup", function () {
UpdateTotals()
})
txtPlayers.addEventListener("keyup", function () {
UpdateTotals()
})

任何人都可以解释为什么我不能只输入函数的名称,我必须将它“子”到另一个函数中吗?

最佳答案

您需要通过删除处理程序名称末尾的 () 来更改事件监听器,如下所示:

txtAmount.addEventListener("keyup", UpdateTotals);

这是为了传递 UpdateTotals 函数的引用,而不是运行 UpdateTotals() 函数.后者实际上会立即运行函数,并传入函数的返回值。

参见 this link关于 JavaScript 函数引用(不带括号)的想法。

关于JavaScript addEventListener 函数语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34933573/

相关文章:

function - Golang 中没有返回值函数

swift - 使用函数中的两个值

javascript - IE 的文本不透明度不起作用

javascript - 单击“保存”按钮时如何验证 gridview?

javascript - 如何在 TinyMCE 4 中设置响应式文件管理器返回绝对 url

javascript - 如何将一个异步函数的结果使用到另一个异步函数

javascript - window.open 在 chrome 和 IE7 中失去焦点

C#;在不单独声明方法的情况下创建一个新委托(delegate)?

haskell - 我可以有一个名为 "/"的值构造函数吗?

objective-c - 这是什么 Objective-C 语法,椭圆样式的点符号? "..."