JavaScript addEventListener 函数语法

JavaScript addEventListener function syntax

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

声明变量:

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()
})

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

在Javascript中,UpdateTotals() 是在不传递参数的情况下调用函数时的值,而 UpdateTotals 是函数本身

所以你想要:

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

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

txtAmount.addEventListener("keyup", UpdateTotals);

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

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

事件侦听器中不需要括号。

变化:

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

至:

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