关于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 基于原型的对象(创建、调用)
Oct 16 Javascript
juqery 学习之五 文档处理 插入
Feb 11 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
Dec 20 Javascript
JavaScript中的数组特性介绍
Dec 30 Javascript
jQuery中prop()方法用法实例
Jan 05 Javascript
JavaScript接口的实现三种方式(推荐)
Jun 14 Javascript
JS实现标签页切换效果
May 04 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
Apr 23 Javascript
详解angular部署到iis出现404解决方案
Aug 14 Javascript
vue实现重置表单信息为空的方法
Sep 29 Javascript
微信小程序实现时间预约功能
Nov 27 Javascript
JavaScript 实现页面滚动动画
Apr 24 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
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
ExtJS的拖拽效果示例
2013/12/09 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
使用javascript插入样式
2016/03/14 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
Vue中引入样式文件的方法
2017/08/18 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
Python的互斥锁与信号量详解
2019/09/12 Python
python实现双色球随机选号
2020/01/01 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
python交互模式基础知识点学习
2020/06/18 Python
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
简述DNS进行域名解析的过程
2013/12/02 面试题
Why we need EJB
2016/10/20 面试题
小学英语课后反思
2014/04/26 职场文书
2014年保育员工作总结
2014/12/02 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
百年孤独读书笔记
2015/06/29 职场文书
六五普法心得体会2016
2016/01/21 职场文书
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python