如何修改带参数的JavaScript废弃event处理函数以消除警告?
问题描述
我有两个几乎完全相同的函数,其中一个带有参数:
function handleBlur() { const list = event.currentTarget.closest("#nav ul"); if (!event.relatedTarget || !list.contains(event.relatedTarget)) { closeNav(); } } function handleDropdownBlur(btn) { const list = event.currentTarget.closest("#nav ul"); if (!event.relatedTarget || !list.contains(event.relatedTarget)) { closeDropdown(btn); } }
给第一个函数添加event作为参数后,它正常运行且消除了废弃警告:
function handleBlur(event) { const list = event.currentTarget.closest("#nav ul"); if (!event.relatedTarget || !list.contains(event.relatedTarget)) { closeNav(); } }
请问该如何修改第二个函数以消除废弃警告?我尝试把event作为第一个或第二个参数添加,但会破坏原有功能。这个函数的调用代码如下:
dropdowns.forEach((dropdown) => { const list = dropdown.querySelectorAll("li a"); list[list.length - 1].addEventListener("blur", (event) => { handleDropdownBlur(dropdown.previousElementSibling); }); });
解决方案
更新
handleDropdownBlur函数,将event设为第一个参数,btn设为第二个参数:function handleDropdownBlur(event, btn) { const list = event.currentTarget.closest("#nav ul"); if (!event.relatedTarget || !list.contains(event.relatedTarget)) { closeDropdown(btn); } }修改调用逻辑,在调用
handleDropdownBlur时同时传入事件对象event和按钮参数:dropdowns.forEach((dropdown) => { const list = dropdown.querySelectorAll("li a"); list[list.length - 1].addEventListener("blur", (event) => { handleDropdownBlur(event, dropdown.previousElementSibling); }); });
这样修改后,既消除了隐式使用全局event导致的废弃警告,又完全保留了原有功能——函数现在明确接收所需的两个参数,逻辑和之前完全一致,只是参数传递更规范。
内容的提问来源于stack exchange,提问作者garrett
相关产品推荐
相关产品推荐

