我正在学习一个Javascript视频教程,在这个教程中,我们正在学习事件监听器。我们编写了以下小型web应用程序,让您可以输入列表中的元素:
var button = document.getElementById("enter");
var input = document.getElementById("userinput");
var ul = document.querySelector("ul");
//Apparently if it is just one parameter it just gets transferred
function inputLength()
{
return input.value.length;
}
//If there is just one parameter it gets transferred
function createListElement()
{
var li = document.createListElement("li");
li.appendChild(document.createTextNode(input.value));
ul.appendChild(li);
input.value = "";
}
// Making sure that it does not add empty strings
function addListAfterClick()
{
if(inputLength() > 0)
{
createListElement();
}
}
//Making sure that it just adds after pressing enter
function addListAfterKeypress(event)
{
if(inputLength() > 0 && event.keyCode === 13)
{
createListElement();
}
}
button.addEventListener("click", addListAfterClick);
input.addEventListener("keypress", addListAfterKeypress);
我搞不懂为什么函数是这样调用的:
button.addEventListener("click", addListAfterClick);
input.addEventListener("keypress", addListAfterKeypress);
而不是这样:
button.addEventListener("click", addListAfterClick());
input.addEventListener("keypress", addListAfterKeypress(event));
我知道它与回调函数有关。然而,我仍然不确定它是如何像魔术艺术一样自动获得参数值的。
发布于 2018-08-20 05:33:51
由于事件侦听器的语法规则如下所示,所以该函数被这样调用
element.addEventListener(event, function, useCapture);
每当我们使用事件侦听器时,您需要添加不带()
的函数,因为使用()
将使函数在您的事件单击之前运行,这是您不想要的。
所以正确的方法是:
button.addEventListener("click", addListAfterClick);
和
input.addEventListener("keypress", addListAfterKeypress(event));
是错误的,因为现在addListAfterKeypress
内部的函数不需要访问上面使用的事件,并且只在需要通过键代码告诉浏览器哪个键将激活此功能时使用
发布于 2018-08-20 05:27:40
添加事件侦听器时,将特定事件绑定到函数。这就像对浏览器说“嘿,每当按钮元素上发生单击事件时,记得执行addListAfterClick
函数”。为此,您只需指定该事件发生时需要调用的函数的名称。如果您将()
添加到函数名称的末尾,您将立即调用它(运行它),而不是将其保存为将来调用的引用(回调)。
发布于 2018-08-20 05:44:02
javascript保存它以便以后使用,因为我知道JavaScript内部eventlistener如何工作如果您使用()
在eventlistener内部编写函数,那么它将像普通函数一样执行
https://stackoverflow.com/questions/51921944
复制相似问题