JavaScript addEventListener函数语法

时间:2016-01-21 20:21:54

标签: 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() {
      ... 
}

这是整个代码。问题是,当我运行它时,它执行UpdateTotals()而没有任何keyup事件,并且监听器不起作用。

如果我做了以下更改,它的工作方式与预期相符:

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

任何人都可以解释我为什么我不能只把这个函数的名字,我必须在另一个函数中“把它”吗?

3 个答案:

答案 0 :(得分:3)

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

所以你想要:

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

答案 1 :(得分:3)

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

txtAmount.addEventListener("keyup", UpdateTotals);

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

请参阅this link有关JavaScript函数引用的概念(没有括号)。

答案 2 :(得分:2)

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

变化:

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

为:

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