? ? 用extjs做項目大部分都會用到一個組件combobox去實現聯想框的功能,如果實現這個功能肯定是要用到事件機制的keyup
extjs為我們提供的keyup的事件,但是前提是要開啟enableKeyEvents:true,打開鍵盤事件
?? 非常奇怪的現象出現了,在監聽其中測試事件,keyup始終就是沒法fire ,同樣的配置下去測試keydown,keypress都可以正確的fire ,沒法獲得keyup的事件就沒有辦法及時的獲取文本框 的內容,這樣的話如何實現聯想框,這個問題困擾了我整整一天太悲劇了,最后在看一個國外網友的一段代碼修改的extjs的keyup的bug
Ext.override(Ext.form.ComboBox, { initEvents : function(){ Ext.form.ComboBox.superclass.initEvents.call(this); this.keyNav = new Ext.KeyNav(this.el, { "up" : function(e){ this.inKeyMode = true; this.selectPrev(); }, "down" : function(e){ if(!this.isExpanded()){ this.onTriggerClick(); }else{ this.inKeyMode = true; this.selectNext(); } }, "enter" : function(e){ this.onViewClick(); this.delayedCheck = true; this.unsetDelayCheck.defer(10, this); }, "esc" : function(e){ this.collapse(); }, "tab" : function(e){ this.onViewClick(false); return true; }, scope : this, doRelay : function(foo, bar, hname){ if(hname == 'down' || this.scope.isExpanded()){ return Ext.KeyNav.prototype.doRelay.apply(this, arguments); } return true; }, forceKeyDown : true }); this.queryDelay = Math.max(this.queryDelay || 10, this.mode == 'local' ? 10 : 250); this.dqTask = new Ext.util.DelayedTask(this.initQuery, this); if(this.typeAhead){ this.taTask = new Ext.util.DelayedTask(this.onTypeAhead, this); } if((this.editable !== false) && !this.enableKeyEvents) { this.el.on("keyup", this.onKeyUp, this); } if(this.forceSelection){ this.on('blur', this.doForce, this); } }, onKeyUp : function(e){ if(this.editable !== false && !e.isSpecialKey()){ this.lastKey = e.getKey(); this.dqTask.delay(this.queryDelay); } Ext.form.ComboBox.superclass.onKeyUp.call(this, e); } });
? ?? 沒想到keyup還真的實現了
順便說一下,我用的是2.2版本的不知道3以上的版本keyup是不是有同樣的問題
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
