ExtJS4.2:快捷键支持(没有你想象的那么简单)
一个页面有两个面板,都有一个【添加(F2)】按钮,如何做快捷键支持?图片示意
第一次实现感觉应该很简单,ExtJs提供了“Ext.util.KeyMap”,很容易做快捷键支持。代码示例
1 /// <reference path="Ext/ext-all-debug-w-comments.js" />
2
3 Ext.onReady(function () {
4
5 var viewport = Ext.create('Ext.container.Viewport', {
6 layout: {
7 type: 'vbox',
8 align: 'stretch'
9 },
10 padding: 10,
11 items: [{
12 xtype: 'panel',
13 id: 'panelA',
14 title: '快捷键测试A',
15 tbar: [{
16 text: '添加(F2)'
17 }],
18 frame: true,
19 flex: 1,
20 html: '您好,这里显示的表格或表单 。'
21 }, {
22 xtype: 'panel',
23 id: 'panelB',
24 title: '快捷键测试B',
25 tbar: [{
26 text: '添加(F2)'
27 }],
28 frame: true,
29 flex: 1,
30 html: '您好,这里显示的表格或表单 。'
31 }]
32 });
33
34 Ext.create('Ext.util.KeyMap', {
35 target: 'panelA',
36 key: Ext.EventObject.F2,
37 fn: function (key, ev) {
38 alert('添加A');
39
40 ev.stopEvent();
41
42 return false;
43 }
44 });
45
46 Ext.create('Ext.util.KeyMap', {
47 target: 'panelB',
48 key: Ext.EventObject.F2,
49 fn: function (key, ev) {
50 alert('添加B');
51
52 ev.stopEvent();
53
54 return false;
55 }
56 });
57 });实际结果打开浏览器后直接按F2没有效果;打开浏览器后用鼠标点击A或B后再按F2同样没有效果。
第二次实现原来是div元素必须增加tabindex=0的属性才行。代码示例
1 /// <reference path="Ext/ext-all-debug-w-comments.js" />
2
3 Ext.onReady(function () {
4
5 var viewport = Ext.create('Ext.container.Viewport', {
6 layout: {
7 type: 'vbox',
8 align: 'stretch'
9 },
10 padding: 10,
11 items: [{
12 xtype: 'panel',
13 id: 'panelA',
14 title: '快捷键测试A',
15 tbar: [{
16 text: '添加(F2)'
17 }],
18 frame: true,
19 flex: 1,
20 html: '您好,这里显示的表格或表单 。',
21 autoEl: {
22 tag: 'div',
23 tabindex: 0
24 }
25 }, {
26 xtype: 'panel',
27 id: 'panelB',
28 title: '快捷键测试B',
29 tbar: [{
30 text: '添加(F2)'
31 }],
32 frame: true,
33 flex: 1,
34 html: '您好,这里显示的表格或表单 。',
35 autoEl: {
36 tag: 'div',
37 &nbs
补充:web前端 , JavaScript ,