ext-js当用blur()和focus()来控制焦点

简介:

 问题再现:

我们遇到以下的问题,就是在ext-js的一个combo控件上选择并点击一个menu item,会弹出一个对话框,如果不选择对话框的时候,焦点始终在原来的combo控件上,而不会定位到弹出对话框中的输入文本框中。

如图:

当我们在这个combobox中选择upgrade时候,会弹出一个输入密码对话框:

这时候,如果不点击"Password Check"对话框中的密码文本框,那么焦点始终在原来的Combobox上。

这个comboBox的代码如下:

 
 
  1. xtype: 'combo'
  2.   store: new Ext.data.SimpleStore({ 
  3.    fields:['actiontype''action'], 
  4.             data : array4actionscombo 
  5.             }), 
  6.      extra : {env : scope.store.env, service : scope.store.service}, 
  7.      displayField:'action'
  8.      valueField:'actiontype'
  9.      mode: 'local'
  10.      name : 'actionscombo',//Micah change id to name for the defect of double element after update extjs to 4.1.1 
  11.      selectOnFocus: true,   
  12.      editable:false
  13.      value : "Actions"
  14.      triggerAction: 'Actions',  
  15.      style : {marginLeft:"100px"}, 
  16.      id : 'action_' + title // Micah changed it and change the Ext.getCmp to Ext.ComponentQuery.query to reset the combo box 
  17.      } 
  18.     ] 


对应的controller中选择"Upgrade”触发事件处理函数是:

 
 
  1. //event listener for name actionscombo combo in the package select panel 
  2.  
  3.                   'combobox[name=actionscombo]':{ 
  4.  
  5.                        select: function(combo, records, eOpts){ 
  6.  
  7.                                 var scope = this
  8.  
  9.                                             if(combo.value == 'upgrade' || combo.value=="enabledisable" || combo.value=="sitespecEnDs"){ 
  10.  
  11.                                                     window.action = combo.value; 
  12.  
  13.                                                     scope.combo = combo; // combo box 
  14.  
  15.                                                     var w = Ext.getCmp('feedpanel'); 
  16.  
  17.                         w.getEl().mask(); 
  18.  
  19.                         
  20.  
  21.                         var passwordPanel = Ext.create("Ext.panel.Panel",{ 
  22.  
  23.                           title: 'Password Check'
  24.  
  25.                                                              width: 400, 
  26.  
  27.                                                              height: 160, 
  28.  
  29.                                                              closable : true
  30.  
  31.                                                              renderTo: Ext.getBody(), 
  32.  
  33.                                                              id : "passwordPanel"
  34.  
  35.                                                              floating : true
  36.  
  37.                                                              draggable:true
  38.  
  39.                                                              autoScroll : true
  40.  
  41.                                                              bodyPadding : 25, 
  42.  
  43.                                                         layout: { 
  44.  
  45.                                                            type: 'vbox',       // Arrange child items 
  46.  
  47.                                                                                                                   // vertically 
  48.  
  49.                                                            align: 'stretch',    // Each takes up full width 
  50.  
  51.                                                            padding: 5 
  52.  
  53.                                                              }, 
  54.  
  55.                                                              items : [ 
  56.  
  57.                                                                       { 
  58.  
  59.                                                                              xtype : "textfield"
  60.  
  61.                                                                              id : "cmdb-password"
  62.  
  63.                                                                              inputType : "password"
  64.  
  65.                                                                              enableKeyEvents:true
  66.  
  67.                                                                              fieldLabel : "Enter your password to proceed"
  68.  
  69.                                                                                labelWidth:200, 
  70.  
  71.   
  72.  
  73.                                                                                style: { 
  74.  
  75.                                                                         paddingBottom: '10px' 
  76.  
  77.                                                                       } 
  78.  
  79.                                                                      }, 
  80.  
  81.                                                                       { 
  82.  
  83.                                                                                xtype : "button"
  84.  
  85.                                                                                text : "Verify"
  86.  
  87.                                                                                style:{ 
  88.  
  89.                                                                                        marginTop:'20px' 
  90.  
  91.                                                                                }, 
  92.  
  93.                                                                                "id" : "cmdbPwdBtn" 
  94.  
  95.                                                                      } 
  96.  
  97.                                                              ] 
  98.  
  99.                                                        }); 
  100.  
  101.                          
  102.  
  103.                         passwordPanel.toFront(true); 
  104.  
  105.                         
  106.  
  107.                                             } 
  108.  
  109.                                    } 
  110.  
  111.                   } 

 

解决方案:

我们只要在事件处理函数最后添加对焦点的处理就可以了,我们先用Ext.getCmp()找到原来的combobox控件,让其失去焦点(blur())方法,然后让新的对话框的密码输入文本框获得焦点就可以了。

 

所以,我们只要在上述代码的第103-106行之间添入以下代码:

 
 
  1. combo.blur(); //charles:let the combo box lose focus  
  2.  
  3. Ext.getCmp("cmdb-password").focus(false,200);//charles::let the password field obtain focus.delay it for 200 millisecoonds  

就可以了, 非常简洁。





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/989546,如需转载请自行联系原作者

目录
相关文章
|
JavaScript UED 前端开发
使用JS取得焦点(focus)元素
原文链接: Get the Focused Element with JavaScript 原文日期: 2014年3月19日 翻译日期: 2014年3月21日 翻译人员: 铁锚 对于良好的用户体验来说,网站/web app的可访问性和可用性,以及功能 都是至关重要的。
827 0
|
2月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
27 0
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
77 0
|
3天前
|
JavaScript 前端开发 测试技术
学习JavaScript
【4月更文挑战第23天】学习JavaScript
11 1
|
11天前
|
JavaScript 前端开发 应用服务中间件
node.js之第一天学习
node.js之第一天学习
|
1月前
|
运维 JavaScript 前端开发
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
|
1月前
|
JavaScript
Vue.js学习详细课程系列--共32节(4 / 6)
Vue.js学习详细课程系列--共32节(4 / 6)
35 0
|
1月前
|
前端开发 搜索推荐 JavaScript
编程笔记 html5&css&js 001 学习编程从网页开始
编程笔记 html5&css&js 001 学习编程从网页开始
|
2月前
|
前端开发 JavaScript
从零开始学习前端开发:HTML、CSS、JavaScript入门指南
【2月更文挑战第1天】本文将带领读者从零开始学习前端开发,介绍HTML、CSS和JavaScript的基础知识与应用,帮助读者快速入门前端开发领域。
65 1
|
2月前
|
数据采集 机器学习/深度学习 JavaScript
画【Python折线图】的一百个学习报告(二、pyecharts引入js文件)
画【Python折线图】的一百个学习报告(二、pyecharts引入js文件)
51 0