关于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 相关文章推荐
用js实现手把手教你月入万刀(转贴)
Nov 07 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
Jun 05 Javascript
JS简单实现文件上传实例代码(无需插件)
Nov 15 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
Nov 25 Javascript
Javascript仿PHP $_GET获取URL中的参数
May 12 Javascript
laypage分页控件使用实例详解
May 19 Javascript
jquery pagination分页插件使用详解(后台struts2)
Jan 22 Javascript
node.js中express-session配置项详解
May 31 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
Dec 14 Javascript
Element-ui DatePicker显示周数的方法示例
Jul 19 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
Mar 06 Javascript
vue相关配置文件详解及多环境配置详细步骤
May 19 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
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
json 定义
2008/06/10 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
Python定时执行之Timer用法示例
2015/05/27 Python
windows下安装Python和pip终极图文教程
2017/03/05 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
2015/08/25 面试题
行政助理岗位职责范文
2013/12/03 职场文书
个人简历自荐信
2013/12/05 职场文书
企业办公室主任岗位职责
2014/02/19 职场文书
《伯牙绝弦》教学反思
2014/03/02 职场文书
教室布置标语
2014/06/26 职场文书
学习普通话的体会
2014/11/07 职场文书
小班上学期个人总结
2015/02/12 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL