【问题标题】:e.preventDefault() isn't working in an es6 arrow function loope.preventDefault() 在 es6 箭头函数循环中不起作用
【发布时间】:2021-07-23 17:43:35
【问题描述】:

我无法阻止默认在箭头函数中工作。

addEventListener on a querySelectorAll() with classList

我想用 es6 的方式来做。

var clickers = document.querySelectorAll('.clicker');

clickers.forEach(clicker => 
  clicker.addEventListener("click", (e) => 
    e.preventDefault();
    console.log("i clicked")
  )
);
<a href="#" class="clicker">test</a>
<a href="#" class="clicker">test</a>

我收到此错误:

"未捕获的语法错误:参数列表后缺少)

JavaScript: SyntaxError: missing ) after argument list

这不是 es6,所以这个答案还不够

我发现当你删除阻止默认值时它会消失

var clickers = document.querySelectorAll('.clicker');

clickers.forEach(clicker => 
  clicker.addEventListener("click", (e) => 
    console.log("i clicked")
  )
);
<a href="#" class="clicker">test</a>
<a href="#" class="clicker">test</a>

但行为是当您点击时它会转到页面顶部,或者更确切地说不会阻止默认

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list

我检查了上面的资源,但在特定上下文中没有帮助。

您如何解决此错误?如何防止 es6 箭头函数循环中的默认值?

【问题讨论】:

标签: javascript ecmascript-6


【解决方案1】:

您在箭头函数中的箭头后面缺少花括号。对于多行箭头函数,块需要花括号。

var clickers = document.querySelectorAll('.clicker');

clickers.forEach(clicker => 
  clicker.addEventListener("click", (e) => {
    e.preventDefault();
    console.log("i clicked")
  })
);
<a href="#" class="clicker">test</a>
<a href="#" class="clicker">test</a>

【讨论】:

  • "对于多行箭头函数..." 这与行数无关,而与函数体内使用的语法类型有关。主体可以是单个表达式(可以写成任意多的行)或“块”(它不是真正的块,但看起来像一个),带有任意数量的语句。
【解决方案2】:

您需要{} 获取多个声明。

请注意,第二个参数是回调function,可以以不同的方式传递。基本形式是: clicker.addEventListener("click", function (e) { })

但您也可以在现代浏览器中使用 lambda 表达式。

var clickers = document.querySelectorAll('.clicker');

clickers.forEach(clicker => 
  clicker.addEventListener("click", (e) => 
  {  e.preventDefault();
    console.log("i clicked");
  })
);
<a href="#" class="clicker">test</a>
<a href="#" class="clicker">test</a>

【讨论】:

  • “您需要为多个语句{}。” 这也不完全正确。对于任意数量的语句(无语句、一个语句或多个语句),您需要 {}。如果正文是表达式,您只能省略{}。例如。 () =&gt; if (true) { return 42; } 不是有效的语法,即使只有一条语句。
猜你喜欢
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 2022-01-21
  • 2016-03-25
相关资源
最近更新 更多