ExtJS4.1中多面板快捷键冲突解决方案:KeyMap应用与div元素tabindex设置
41 浏览量
更新于2024-08-28
收藏 47KB PDF 举报
在ExtJS 4.1中,实现多个面板(例如`panelA`和`panelB`)的快捷键支持时,可能会遇到一些挑战。问题的核心在于如何正确设置快捷键映射,特别是当页面上存在多个具有相同快捷键的按钮(如“添加(F2)”)时。原始的实现思路是利用`Ext.util.KeyMap`来绑定不同的事件处理函数,针对每个面板(通过`target`属性指定)。
第一次尝试的代码示例中,创建了两个`KeyMap`实例,分别针对`panelA`和`panelB`,并设置`key`为`Ext.EventObject.F2`,即F2键。然而,实际运行时,无论直接按F2还是先点击面板再按F2,快捷键都无效。这可能是由于默认情况下,浏览器会优先响应焦点元素的键盘事件,而`KeyMap`可能并未获得焦点。
为了解决这个问题,第二次实现引入了一个关键的调整:确保包含快捷键按钮的div元素具有`tabindex=0`属性,这样可以确保这些元素在接收到键盘焦点时能正确响应快捷键。`tabindex`属性用于定义元素在文档中的焦点顺序,值为0表示该元素在焦点切换时会被考虑。
修正后的代码示例将包含以下改动:
1. 在创建面板时,为其包含的按钮添加`tabindex`属性,例如:
```javascript
items: [{
// ...
tbar: [{
text: '添加(F2)',
tabIndex: 0 // 添加这个属性
}]
// ...
}]
```
2. 创建`KeyMap`时,使用带有`tabIndex`的按钮元素作为`target`,而不是面板本身:
```javascript
Ext.create('Ext.util.KeyMap', {
target: document.getElementById('addButtonA'), // 替换为实际按钮的id
key: Ext.EventObject.F2,
fn: function(key, ev) {
alert('添加A');
ev.stopEvent();
return false;
}
});
```
同样的,对于`panelB`的按钮也做同样的修改。
通过以上调整,`KeyMap`将能正确地与带有`tabindex`的按钮关联,并在用户按下F2键时触发对应的事件处理函数。这解决了在ExtJS 4.1中同时处理多个具有相同快捷键的按钮的问题。需要注意的是,实际项目中可能还需要进一步检查浏览器兼容性和事件处理的优先级,确保在所有预期的使用场景下都能正常工作。
2018-10-25 上传
2015-09-19 上传
点击了解资源详情
点击了解资源详情
2019-04-07 上传
2013-05-15 上传
weixin_38707826
- 粉丝: 5
- 资源: 907
最新资源
- StarModAPI: StarMade 模组开发的Java API工具包
- PHP疫情上报管理系统开发与数据库实现详解
- 中秋节特献:明月祝福Flash动画素材
- Java GUI界面RPi-kee_Pilot:RPi-kee专用控制工具
- 电脑端APK信息提取工具APK Messenger功能介绍
- 探索矩阵连乘算法在C++中的应用
- Airflow教程:入门到工作流程创建
- MIP在Matlab中实现黑白图像处理的开源解决方案
- 图像切割感知分组框架:Matlab中的PG-framework实现
- 计算机科学中的经典算法与应用场景解析
- MiniZinc 编译器:高效解决离散优化问题
- MATLAB工具用于测量静态接触角的开源代码解析
- Python网络服务器项目合作指南
- 使用Matlab实现基础水族馆鱼类跟踪的代码解析
- vagga:基于Rust的用户空间容器化开发工具
- PPAP: 多语言支持的PHP邮政地址解析器项目