关于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 相关文章推荐
几个javascript操作word的参考代码
Oct 26 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
Apr 19 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
Apr 20 Javascript
js数组操作常用方法
May 08 Javascript
用javascript关闭本窗口不弹出询问框的方法
Sep 12 Javascript
AngularJS入门教程之REST和定制服务详解
Aug 19 Javascript
Node.js测试中的Mock文件系统详解
Nov 21 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
Nov 30 Javascript
几种响应式文字详解
May 19 Javascript
element上传组件循环引用及简单时间倒计时的实现
Oct 01 Javascript
对TypeScript库进行单元测试的方法
Jul 18 Javascript
javaScript把其它类型转换为Number类型
Oct 13 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(3)
2006/10/09 PHP
Smarty模板快速入门
2007/01/04 PHP
php调用shell的方法
2014/11/05 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
js改变鼠标的形状和样式的方法
2014/03/31 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
微信小程序商品到详情的实现
2017/06/27 Javascript
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
Jquery的Ajax技术使用方法
2019/01/21 jQuery
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
Python pymongo模块常用操作分析
2018/09/01 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
大学毕业通用个人的求职信
2013/12/08 职场文书
运动会广播稿100字
2014/01/11 职场文书
妈妈的账单教学反思
2014/02/06 职场文书
工程资料员岗位职责
2014/03/10 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
分析Java中Map的遍历性能问题
2021/06/26 Java/Android