IE11中Enter键盘事件无法正常触发的技术问题咨询
解决IE11中Enter键盘事件无法触发的问题
看起来你在IE11里碰到了Enter键事件捕获的兼容性坑,旧浏览器这类问题确实挺常见的,我给你几个针对性的解决方案:
排查表单默认行为的拦截
IE11里如果页面存在<form>元素,当焦点在表单内的输入控件时按下Enter,浏览器会默认触发表单的submit事件,这个过程可能会阻断keyup事件向document层面冒泡,导致你的监听函数抓不到Enter事件。你可以先给表单绑定事件阻止默认提交:$('form').on('submit', function(e) { e.preventDefault(); });或者直接在表单元素上也绑定键盘事件,确保Enter键能被正常捕获。
把keyup替换为keydown事件
相比keyup,keydown在IE11里的兼容性更稳定,不少旧浏览器对keyup的支持会有遗漏。你可以修改事件监听代码:$(document).on('keydown', function(e) { var keyCode = e.keyCode || e.which; // 兼容IE的事件对象属性 console.log('IS ENTER', keyCode); if (keyCode === 13) { // 这里添加Enter事件的处理逻辑 } });修复closeWynPopupKeyb函数的逻辑问题
你的closeWynPopupKeyb函数里,e.preventDefault()放在了最后,不管是否触发关闭弹窗都会阻止默认行为,这可能导致IE11里的事件处理异常。同时要兼容事件对象的keyCode属性:var closeWynPopupKeyb = function(e) { var keyCode = e.keyCode || e.which; if (keyCode === 27 || keyCode === 71 || keyCode === 13) { closeWynPopup(e); e.preventDefault(); // 只在触发关闭时阻止默认行为 } };确保事件绑定时机正确
一定要保证你的jQuery事件绑定代码是在DOM加载完成后执行的,比如放在$(document).ready()回调里:$(document).ready(function() { $(document).on('keydown', function(e) { var keyCode = e.keyCode || e.which; console.log('IS ENTER', keyCode); }); // 绑定closeWynPopupKeyb的事件 $(document).on('keydown', closeWynPopupKeyb); });
你可以优先尝试前两个方案,这是IE11键盘事件失效的最常见原因,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Non
相关产品推荐
相关产品推荐

