javascript - JavaScript 中匿名函数的替代方案

标签 javascript html

document.addEventListener('DOMContentLoaded', function() {
  let input = document.querySelector('input');
  input.addEventListener('keyup', function(event) {
    let name = document.querySelector('#name');
    if (input.value) {
      name.innerHTML = `hello, ${input.value}`;
    } else {
      name.innerHTML = 'hello, whoever you are';
    }
  });
});
<form>
  <input autocomplete="off" autofocus placeholder="Name" type="text">
</form>
<p id="name"></p>

在上面的 HTML 页面中,they have使用匿名函数来查找 keyup 事件并用我们键入/输入的单词打招呼。

如何在不使用匿名函数的情况下实现此目的?到目前为止我已经尝试修改脚本,但无法识别 keyup 事件

function greet() {
  let name = document.querySelector("#name");
  let event = document.querySelector("input");
  if (event.value) {
    name.innerHTML = `HELLO ${event.value}`
  } else {
    name.innerHTML = `HELLO person`
  }
}

function listen() {
  let input = document.querySelector("input");
  input.addEventListener("keyup", greet);
}

document.addEventListener("DOMContentLoaded", listen);

最佳答案

您必须将 event 对象传递给事件处理函数,而不是尝试读取任意 DOM 元素,如下所示:

function greet(event)
{
   let name = document.querySelector("#name");

   if (event.target.value) {
         name.innerHTML = `HELLO ${event.target.value}`
   } else {
         name.innerHTML = `HELLO person`
   }
}

function listen()
{
   let input = document.querySelector("input");
   input.addEventListener("keyup", greet);
}

document.addEventListener("DOMContentLoaded", listen);
<div id="name">HELLO person</div>
<div>
  <input type="text" name="name" />
</div>

关于javascript - JavaScript 中匿名函数的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66560456/

相关文章:

javascript - JQuery:用另一组元素替换一组元素的优雅方式?

javascript - 如何获取 CKEditor 5 的值?

javascript - Easy Tabs 插件,总是滚动到顶部

html - 制作html框 "stick out"

javascript - sequelize 更新多行

javascript - 使用数组的 AJAX Promise

javascript - 如何使用 angularjs 或 jquery 将每个单击的按钮操作保存在 json 文件/对象中?

javascript - 是否可以使用 javascript 生成按键?

html - nokogiri:xml 到 html

Javascript,X-Editable 仅更新第一个提交的数据,但不更新第二个