关于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循环变量注册dom事件 之强大的闭包
Sep 08 Javascript
javascript 实现字符串反转的三种方法
Nov 23 Javascript
jqplot通过ajax动态画折线图的方法及思路
Dec 08 Javascript
JS可以控制样式的名称写法一览
Jan 16 Javascript
JavaScript通过代码调用Flash显示的方法
Feb 02 Javascript
jQuery获取select选中的option的value值实现方法
Aug 29 Javascript
原生JS实现的放大镜效果实例代码
Oct 15 Javascript
jQuery动态添加与删除tr行实例代码
Oct 18 Javascript
微信浏览器禁止页面下拉查看网址实例详解
Jun 28 Javascript
JS实现可视化文件上传
Sep 08 Javascript
js实现指定时间倒计时效果
Aug 26 Javascript
vuex存储token示例
Nov 11 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
php5.3 废弃函数小结
2010/05/16 PHP
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
js版本A*寻路算法
2006/12/22 Javascript
JS模拟多线程
2007/02/07 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
微信小程序实现发微博功能的示例代码
2020/06/24 Javascript
java直接调用python脚本的例子
2014/02/16 Python
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
在Python中使用列表生成式的教程
2015/04/27 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
Python制作词云的方法
2018/01/03 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
详解Python中第三方库Faker
2020/09/25 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
大学生求职中的自我评价
2013/10/01 职场文书
企业安全生产责任书
2014/04/14 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
紧急迫降观后感
2015/06/15 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
公司食堂管理制度
2015/08/05 职场文书