我有一个通过单击事件侦听器调用的函数。它接受一个事件参数:
function editExistingEmp(event)
调用此函数时,将循环遍历所有 DOM 内容,查找具有特定 ID 的 DOM 元素,然后向该元素动态添加事件侦听器:
nodeHandler.addEventListener("click", function() { selectNodeEdit(event); }, false);
我的问题是现在这些新的事件监听器正在发送最初从函数接收到的事件数据作为参数。但我需要这些新的事件监听器从它们添加到的 DOM 元素中传递事件数据,而不是传递到函数中的参数事件。
我的问题是现在这些新的事件监听器正在发送最初从函数接收到的事件数据作为参数。
正确,因为您在函数中创建的处理程序在
event
参数上关闭。
但是我需要这些新的事件监听器从它们添加到的 DOM 元素中传递事件数据,而不是传递到函数中的参数事件。
您显式地将传递给函数的参数传递给它们。为了避免这种情况,不要向他们传递参数。听起来您希望事件系统将参数传递给他们。在这种情况下,最简单的方法就是删除包装函数:
nodeHandler.addEventListener("click", selectNodeEdit, false);
将
selectNodeEdit
函数传递给 addEventListener
;事件系统将使用相关事件对象作为参数来调用它,并将其作为第一个参数接收。
如果您愿意,您可以仍然拥有一个包装器,通过接受参数并将其传递:
// No need for this in most cases
nodeHandler.addEventListener("click", (event) => selectNodeEdit(event), false);
...但大多数情况下没有必要。
一些旁注:
回复
在 JavaScript 中的同一范围内使用“event”关键字两次?
您没有在同一范围内使用它们。您在 editExistingEmp
函数内的
nested范围内使用该参数。
event
不是 JavaScript 中的关键字。在您的代码中,它是 editExistingEmp
的第一个参数的名称。还有一个名为 event
的自动全局变量,但使用它并不是最佳实践。