【发布时间】:2020-05-12 12:23:31
【问题描述】:
我正在绘制一个框格,希望能够单击每个框并使用 SocketIO 向服务器发送带有其 ID 的通知
<body>
<div class="wrapper">
<div id="1" class="box"></div>
<div id="2" class="box"></div>
</div>
</body>
let boxes = document.querySelectorAll('.box');
Array.from(boxes, function(box) {
box.addEventListener('click', function() {
id = box.id
//Send socketio message to server
socket.emit('box_event_client', {data: id});
});
});
这可行,我可以单击每个框并将事件发送到服务器,但显然这不允许删除偶数侦听器,按照 https://www.w3schools.com/jsref/met_element_removeeventlistener.asp
注意:要删除事件处理程序,使用 addEventListener() 方法指定的函数必须是外部函数, 匿名函数,例如 "element.removeEventListener("event", function(){ myScript });"不会工作。
所以我改成了这个
Array.from(boxes, function(box) {
box.addEventListener('click', addEL(box.id));
});
function addEL(boxID) {
console.log("Box clicked: " + boxID)
//Send socketio message to server
socket.emit('box', {data: boxID});
}
现在,一旦页面加载到浏览器中,网格中的所有框都会自动“点击”并将事件发送到服务器。
谁能帮助理解为什么会这样?
【问题讨论】:
标签: javascript addeventlistener