我今天开始使用 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/