javascript - Brave 浏览器的事件监听器/.getElementById 问题

标签 javascript

我今天开始使用 Brave,发现我的一些网络应用程序/网站无法正常工作。具体来说,一些按钮没有得到处理。因此,为了排除故障,我添加了一个带有窗口点击处理程序的 IIFE 来记录 this.id。 Brave 控制台显示 undefined 但是 html 按钮元素显然定义了 id 属性?我错过了什么,还是 Brave 还没有完全烤好?

(function() {
  console.log('IIFE Fired.');
  window.addEventListener("click", clickHandler);
  
  function clickHandler() {
      console.log(this.id);
  }
}());
<head>
  <link href='//fonts.googleapis.com/css?family=Roboto:400,700,100,300,700italic,500,500italic,400italic,300italic,100italic|Roboto+Condensed:300' rel='stylesheet' type='text/css'>
  <link rel="stylesheet" href="//fonts.googleapis.com/icon?family=Material+Icons">
  <link rel="stylesheet" href="//code.getmdl.io/1.3.0/material.grey-deep_orange.min.css" />
</head>

<body>
  <button class="mdl-button mdl-js-button mdl-js-ripple-effect" id="credential-save">
    Save
  </button>

  <script src="//code.getmdl.io/1.2.1/material.min.js"></script>
</body>

(function() {
  console.log('IIFE Fired.');
  window.addEventListener("click", clickHandler);

  function clickHandler() {
      console.log(this.id);
  }
}());

最佳答案

这完全是预料之中的。在事件监听器中,this 是当前事件目标。也就是说,它是您添加事件监听器的节​​点。在本例中,它是 window。而且它没有 id

window.addEventListener("click", function() {
  console.log(this === window); // true
});
<button>Save</button>

您要么不委托(delegate)事件并将事件监听器添加到按钮,要么使用事件目标。

window.addEventListener("click", function(e) {
  console.log(e.target.id);
});
<button id="credential-save">Save</button>

关于javascript - Brave 浏览器的事件监听器/.getElementById 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41517171/

相关文章:

javascript - Next.js 类型错误 : Cannot set properties of undefined (setting 'hook' )

javascript - Handlebars 根据值渲染模板

javascript - 即使变量匹配,if 语句也会失败

java - Play Framework : load javascript only on specific method calls

javascript - 具有范围值的 var 而不使用数组

javascript - Braintree Paypal 可在沙箱中运行,但不能在生产环境中运行

javascript - 使用 RxJS 重置事件超时

javascript - 在预填表格上显示/隐藏

javascript - 检查一个具有动态值的单选按钮

javascript - 如何使用 Prometheus 测量请求的不同时间