替换不推荐的'keypress`dom事件

2cmtqfgy  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(281)

根据mdn文章 keypress 事件已弃用:

但我在别处找不到任何关于我们是否应该在新项目中使用此活动的信息。如果我们不应该,那么替代品是什么?
有人能提供一个见解吗?

mm9b1k5b

mm9b1k5b1#

由于该事件已被弃用,您应该避免在新代码中使用它,并计划将其从旧代码中删除。w3c规范对不推荐的功能作了如下说明:
标记为已弃用的功能包含在规范中,作为对旧实现或规范的参考,但这些功能是可选的,不鼓励使用。在本规范中,只能弃用具有现有或正在进行替换的功能部件。由于与现有内容向后兼容的原因,尚未包含对功能支持的实现可能会实现不推荐的功能,但创建内容的内容作者不应使用不推荐的功能,除非没有其他方法解决用例。引用此规范的其他规范不应使用不推荐使用的功能,而应指向不推荐使用该功能的替代品。本规范中标记为已弃用的功能预计将从将来的规范中删除。
规范 keypress event 说:
警告:本规范中定义的按键事件类型仅供参考和完整,但本规范不推荐使用此事件类型。在编辑上下文时,作者可以订阅beforeinput事件。
您也可以使用 keydown 和/或 keyup 事件。查看keyup、keydown、keypress和input事件之间的区别?
但是, beforeinput 还没有太多的支持,如果这些其他事件都不适合您的用例,您将不得不继续使用 keypress 目前(这是规范中的“除非没有其他方法来解决用例”异常)。

sczxawaw

sczxawaw2#

除非(为你们感到羞耻)你们或你们使用的东西在每一个机会都不分青红皂白地轰动着事件,否则你们不可能超努力工作。
像这样简单但功能强大的实用程序正是您应该只对html的孤立节点叶执行此操作的原因。
在那些必须防止按键按下冒泡的情况下,您可以简单地将以下内容 Package 在一个函数中,该函数使用一个参数代替document.body,如果您仍然希望hmtl可以使用“keypress2”事件,则只需在冒泡停止的点应用。

const keyBlacklist = [
    'Shift',
    'Alt',
    'Control',
    'Meta'
];

document.body.addEventListener('keydown',(e)=>{
    if(keyBlacklist.indexOf(e.key) === -1){
        const newKeyPress = new CustomEvent('keypress2',{detail:e});
        e.target.dispatchEvent(newKeyPress);
    }
});

document.body.addEventListener('keypress2',e=>{console.log(e.detail);});

相关问题