我的问题有点奇怪,因为我有两个html buttons
如
<button>ok</button>
<button>ok</button>
我正在附加onclick
个事件,就像这样
var buttons=document.getElementsByTagName('button');
for(var i=0;i < buttons.length; i++){
buttons[i].onclick = function() {
focus = this;
alert("ok i am clicked")
}
}
现在我正在做这个
现在我在window
上附加了一个事件附件
window.onclick = function(e) {
console.log(e.target == focus)
}
根据我的说法,如果我点击console.log(e.target == focus)
按钮,true
条件应为first
,true
按钮也是second
!
请告诉我我错在哪里,请给出vanilla JavaScript
解决方案,在我的方案中我不能使用id
我将非常感谢你:)
here就是它的垃圾箱。
答案 0 :(得分:1)
从编辑中,问题的解决方案非常简单:
单击每个按钮设置focus
元素,然后窗口侦听器将触发并检查目标(按钮)是否为focus
元素。
显然,它总是如此,因为你只需将它设置为focus
元素。
您可以使用target.addEventListener(type, listener, useCapture);
添加窗口监听器,并将useCapture
设置为true
。
然后它会在按钮的onclick之前触发,你必须单击两次才能使回调返回true。
答案 1 :(得分:0)
您可以使用"Immediately-invoked function expression"。
此模式将确保在点击期间i
仍然保留正确的值,因为它有自己的范围:
var buttons = document.getElementsByTagName('button');
for (var i = 0; i < buttons.length; i++) {
(function (i) {
buttons[i].onclick = function () {
alert("button " + i + " was clicked");
}
}(i));
}
请参阅 fiddle