diff --git a/org.adempiere.ui.zk/WEB-INF/src/web/js/zkforge/KeyListener.js b/org.adempiere.ui.zk/WEB-INF/src/web/js/zkforge/KeyListener.js index d8e9346bf3..2dad197d90 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/web/js/zkforge/KeyListener.js +++ b/org.adempiere.ui.zk/WEB-INF/src/web/js/zkforge/KeyListener.js @@ -97,7 +97,8 @@ zkforge.KeyListener = zk.$extends(zul.Widget, { evt.preventDefault(); // _autoBlur = true will let current focus control blur but this event is sent after key event, so haven't valuable - id.zk.Extend.fakeOnchange (zk.currentFocus); + if (zk.currentFocus)//just need to raise it when have control got focus, other NPE + id.zk.Extend.fakeOnchange (zk.currentFocus); zAu.send(new zk.Event(zk.Widget.$(this), 'onCtrlKey', {keyCode: keycode, ctrlKey: evt.ctrlKey, shiftKey: evt.shiftKey, altKey: evt.altKey}, {toServer: true})); return false; diff --git a/org.adempiere.ui.zk/index.zul b/org.adempiere.ui.zk/index.zul index 20f59596ab..f8f715d4dc 100644 --- a/org.adempiere.ui.zk/index.zul +++ b/org.adempiere.ui.zk/index.zul @@ -163,6 +163,24 @@ Copyright (C) 2007 Ashley G Ramdass. this.domUnlisten_(this.$n(), "onChange", "onAutofill"); //unlisten }); + zk.override(zul.inp.Combobox.prototype, "doKeyDown_", function (evt) { + // avoid confuse of idempiere shortcut key and function key of combobox + if ( (evt.altKey || evt.ctrlKey || evt.shiftKey) && + (evt.keyCode == 33 || evt.keyCode == 34 || evt.keyCode == 35 || evt.keyCode == 36 || evt.keyCode == 38 || evt.keyCode == 40 || evt.keyCode == 37 || evt.keyCode == 39) ){//page up | page down | end | home | up | down | left | write + + if (this.isOpen())//close drop down if already open. it will let combobox select current item, it's consistent with lost focus + this.close({sendOnOpen: true}); + + return; + // TODO:current idempiere use alt + down/up to move child parrent tab, but combobox also use it to open, close drop down + // at the moment, idempiere shortcut is more useful, so just get it work + }else{ + this.$doKeyDown_(evt); + } + + }); + + }); zk.afterLoad('zul.mesh', function () {