关于ExtJS4.1:快捷键支持的问题


Posted in Javascript onApril 24, 2013

问题一个页面有两个面板,都有一个【添加(F2)】按钮,如何做快捷键支持?图片示意

关于ExtJS4.1:快捷键支持的问题

第一次实现
感觉应该很简单,ExtJs提供了“Ext.util.KeyMap”,很容易做快捷键支持。
代码示例

/// <reference path="Ext/ext-all-debug-w-comments.js" /> Ext.onReady(function () {
     var viewport = Ext.create('Ext.container.Viewport', {
         layout: {
             type: 'vbox',
             align: 'stretch'
         },
         padding: 10,
         items: [{
             xtype: 'panel',
             id: 'panelA',
             title: '快捷键测试A',
             tbar: [{
                 text: '添加(F2)'
             }],
             frame: true,
             flex: 1,
             html: '您好,这里显示的表格或表单 。'
         }, {
             xtype: 'panel',
             id: 'panelB',
             title: '快捷键测试B',
             tbar: [{
                 text: '添加(F2)'
             }],
             frame: true,
             flex: 1,
             html: '您好,这里显示的表格或表单 。'
         }]
     });
     Ext.create('Ext.util.KeyMap', {
         target: 'panelA',
         key: Ext.EventObject.F2,
         fn: function (key, ev) {
             alert('添加A');
             ev.stopEvent();
             return false;
         }
     });
     Ext.create('Ext.util.KeyMap', {
         target: 'panelB',
         key: Ext.EventObject.F2,
         fn: function (key, ev) {
             alert('添加B');
             ev.stopEvent();
             return false;
         }
     });
 });    

实际结果

打开浏览器后直接按F2没有效果;打开浏览器后用鼠标点击A或B后再按F2同样没有效果。
第二次实现
原来是div元素必须增加tabindex=0的属性才行。
代码示例

/// <reference path="Ext/ext-all-debug-w-comments.js" /> Ext.onReady(function () {
     var viewport = Ext.create('Ext.container.Viewport', {
         layout: {
             type: 'vbox',
             align: 'stretch'
         },
         padding: 10,
         items: [{
             xtype: 'panel',
             id: 'panelA',
             title: '快捷键测试A',
             tbar: [{
                 text: '添加(F2)'
             }],
             frame: true,
             flex: 1,
             html: '您好,这里显示的表格或表单 。',
             autoEl: {
                 tag: 'div',
                 tabindex: 0
             }
         }, {
             xtype: 'panel',
             id: 'panelB',
             title: '快捷键测试B',
             tbar: [{
                 text: '添加(F2)'
             }],
             frame: true,
             flex: 1,
             html: '您好,这里显示的表格或表单 。',
             autoEl: {
                 tag: 'div',
                 tabindex: 0
             }
         }]
     });
     Ext.create('Ext.util.KeyMap', {
         target: 'panelA',
         key: Ext.EventObject.F2,
         fn: function (key, ev) {
             alert('添加A');
             ev.stopEvent();
             return false;
         }
     });
     Ext.create('Ext.util.KeyMap', {
         target: 'panelB',
         key: Ext.EventObject.F2,
         fn: function (key, ev) {
             alert('添加B');
             ev.stopEvent();
             return false;
         }
     });
 });

实际结果
打开浏览器后直接按F2没有效果;打开浏览器后用鼠标点击A或B后再按F2就有效果了。

第三次实现
要解决打开浏览器之后不用点击div就能识别快捷键,需要手动调用foucs()方法。
代码示例

/// <reference path="Ext/ext-all-debug-w-comments.js" /> Ext.onReady(function () {
     var viewport = Ext.create('Ext.container.Viewport', {
         layout: {
             type: 'vbox',
             align: 'stretch'
         },
         padding: 10,
         items: [{
             xtype: 'panel',
             id: 'panelA',
             title: '快捷键测试A',
             tbar: [{
                 text: '添加(F2)'
             }],
             frame: true,
             flex: 1,
             html: '您好,这里显示的表格或表单 。',
             autoEl: {
                 tag: 'div',
                 tabindex: 0
             }
         }, {
             xtype: 'panel',
             id: 'panelB',
             title: '快捷键测试B',
             tbar: [{
                 text: '添加(F2)'
             }],
             frame: true,
             flex: 1,
             html: '您好,这里显示的表格或表单 。',
             autoEl: {
                 tag: 'div',
                 tabindex: 0
             }
         }]
     });
     Ext.create('Ext.util.KeyMap', {
         target: 'panelA',
         key: Ext.EventObject.F2,
         fn: function (key, ev) {
             alert('添加A');
             ev.stopEvent();
             return false;
         }
     });
     Ext.create('Ext.util.KeyMap', {
         target: 'panelB',
         key: Ext.EventObject.F2,
         fn: function (key, ev) {
             alert('添加B');
             ev.stopEvent();
             return false;
         }
     });
     Ext.get('panelB').focus();
 });

实际结果
打开浏览器后直接按F2有效果了;打开浏览器后用鼠标点击A或B后再按F2就有效果了。
Javascript 相关文章推荐
在IE下获取object(ActiveX)的Param的代码
Sep 15 Javascript
当鼠标移动时出现特效的JQuery代码
Nov 08 Javascript
JavaScript数据结构和算法之图和图算法
Feb 11 Javascript
jQuery带进度条全屏图片轮播特效代码分享
Jun 28 Javascript
Extjs让combobox写起来简洁又漂亮
Jan 05 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
Jan 08 Javascript
JavaScript基本语法_动力节点Java学院整理
Jun 26 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
Aug 04 Javascript
解析vue中的$mount
Dec 21 Javascript
简单的三步vuex入门
May 20 Javascript
详解如何用typescript开发koa2的二三事
Nov 13 Javascript
Node.js API详解之 assert模块用法实例分析
May 26 Javascript
Jquery实现三层遍历删除功能代码
Apr 23 #Javascript
jQuery获取浏览器中的分辨率实现代码
Apr 23 #Javascript
使用PHP+JQuery+Ajax分页的实现
Apr 23 #Javascript
jQuery写的日历(包括日历的样式及功能)
Apr 23 #Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
Apr 23 #Javascript
js事件冒泡实例分享(已测试)
Apr 23 #Javascript
js绑定事件this指向发生改变的问题解决方法
Apr 23 #Javascript
You might like
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
PHP Stream_*系列函数
2010/08/01 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
redux-saga 初识和使用
2018/03/10 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python列表计数及插入实例
2014/12/17 Python
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
python实现的系统实用log类实例
2015/06/30 Python
Django添加feeds功能的示例
2018/08/07 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
2014年教师政治学习材料
2014/06/02 职场文书
创文明城市标语
2014/06/16 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS