首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript addEventListener回调逻辑

Javascript addEventListener回调逻辑
EN

Stack Overflow用户
提问于 2018-08-20 05:22:36
回答 4查看 1.4K关注 0票数 1

我正在学习一个Javascript视频教程,在这个教程中,我们正在学习事件监听器。我们编写了以下小型web应用程序,让您可以输入列表中的元素:

代码语言:javascript
复制
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);

我搞不懂为什么函数是这样调用的:

代码语言:javascript
复制
button.addEventListener("click", addListAfterClick);
input.addEventListener("keypress", addListAfterKeypress);

而不是这样:

代码语言:javascript
复制
button.addEventListener("click", addListAfterClick());
input.addEventListener("keypress", addListAfterKeypress(event));

我知道它与回调函数有关。然而,我仍然不确定它是如何像魔术艺术一样自动获得参数值的。

EN

回答 4

Stack Overflow用户

发布于 2018-08-20 05:33:51

由于事件侦听器的语法规则如下所示,所以该函数被这样调用

代码语言:javascript
复制
element.addEventListener(event, function, useCapture);

每当我们使用事件侦听器时,您需要添加不带()的函数,因为使用()将使函数在您的事件单击之前运行,这是您不想要的。

所以正确的方法是:

button.addEventListener("click", addListAfterClick);

input.addEventListener("keypress", addListAfterKeypress(event));

是错误的,因为现在addListAfterKeypress内部的函数不需要访问上面使用的事件,并且只在需要通过键代码告诉浏览器哪个键将激活此功能时使用

票数 1
EN

Stack Overflow用户

发布于 2018-08-20 05:27:40

添加事件侦听器时,将特定事件绑定到函数。这就像对浏览器说“嘿,每当按钮元素上发生单击事件时,记得执行addListAfterClick函数”。为此,您只需指定该事件发生时需要调用的函数的名称。如果您将()添加到函数名称的末尾,您将立即调用它(运行它),而不是将其保存为将来调用的引用(回调)。

票数 0
EN

Stack Overflow用户

发布于 2018-08-20 05:44:02

javascript保存它以便以后使用,因为我知道JavaScript内部eventlistener如何工作如果您使用()在eventlistener内部编写函数,那么它将像普通函数一样执行

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51921944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档