关于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 相关文章推荐
JQuery 无废话系列教程(二) jquery实战篇上
Jun 23 Javascript
简单的jquery拖拽排序效果实现代码
Sep 20 Javascript
js触发asp.net的Button的Onclick事件应用
Feb 02 Javascript
jquery $.fn $.fx是什么意思有什么用
Nov 04 Javascript
node.js学习之base64编码解码
Oct 21 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
Jul 18 Javascript
JavaScript对JSON数据进行排序和搜索
Jul 24 Javascript
vue 微信授权登录解决方案
Apr 10 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
Aug 20 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
Oct 11 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
Dec 20 jQuery
vue render函数动态加载img的src路径操作
Oct 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 Undefined index报错的修复方法
2011/07/17 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
详解使用vuex进行菜单管理
2017/12/21 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
python线程锁(thread)学习示例
2013/12/04 Python
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
python 项目目录结构设置
2020/02/14 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
质检员岗位职责
2013/12/17 职场文书
初三化学教学反思
2014/01/23 职场文书
《长城》教学反思
2014/02/14 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
民事撤诉申请书范本
2015/05/18 职场文书