javascript - 防止按键进入由键盘事件聚焦的元素
问题描述
我有一个.add-color
div 可以单击以创建一个 contenteditable 跨度,然后专注于后者。
但是为了可访问性,我还对其进行了设置,以便当用户在关注.add-color
div 时按下 <enter> 或 <space> 时,键盘事件处理程序会触发相同的事件。不幸的是,当后者发生时, <enter> 或 <space> 字符被传递给新聚焦的跨度,这是我不想要的。
有什么方法可以防止该字符被传递到 contenteditable 跨度?在我的方法中是否有某种方法可以清除键盘输入缓冲区(或吞下按键)dom.KeyActivate
?
在我的 DOM 实用程序中:
dom.KeyActivate = function(fcn) {
return function(evt) {
if(evt.key !== 'Enter' && evt.key !== " ") {
return;
}
fcn(evt);
}
};
在小部件定义中:
_create: function() {
const $rangeBar = self.element.find('.rangeBar');
self._on({
"click .add-color": () => self._AddColor($rangeBar),
"keypress .add-color": dom.KeyActivate(
() => self._AddColor($rangeBar)
),
})
},
_AddColor: function($parent) {
$(`<span contenteditable="true" type="number" name="ranges[]">?</span>`)
.appendTo($parent).focus();
},
万一有什么不同,我正在 Chrome 上进行开发。
解决方案
我似乎找到了解决方案:只需延迟focus()
直到调用堆栈清除后使用setTimeout
:
_AddColor: function($parent) {
const $numSpan = $(`<span contenteditable="true" type="number" name="ranges[]">?</span>`)
.appendTo($parent);
setTimeout( ()=> {$numSpan.focus()}, 0 );
}
推荐阅读
- javascript - 动态创建的按钮无法访问
- html - HTML 标记在 576 像素以下不是 100% 宽度
- postgresql - 使用 spark 从 Postgres 并行读取数据,用于没有整数主键列的表
- spring-boot - Kerberos 客户端 - kerberoRestTemplate 不工作
- python - 按日期合并多个数据框(删除重复项)
- iis - 可以帮我解决 0x80070021 错误吗
- javascript - Array.fill().map() 在反应中不起作用
- svelte - Svelte 不更新子组件
- kubernetes - Kubernetes 上的 EventStore:连接被拒绝
- functional-programming - Ramda applySpec - 保留未修改的道具