我在 ZK 框架中实现了一个CTRL键监听器。但是,我遇到了 Firefox 和 Chrome 的问题。
如果我按CTRL+R或CTRL+A或CTRL+ S,我的应用程序事件会触发,但在 Firefox 和 Chrome 中,默认CTRL事件也会触发;分别刷新、全选和保存。例如,如果我按CTRL+ A,我的事件将被触发并选择页面上的所有文本。
谁能告诉我这是 ZK 问题还是我做错了什么。
注意:不仅为文本框触发了整个页面的事件。
在 ZUL 我用过:
<window apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('com.web.viewmodel.MyViewModel')"
width="100%" height="100%" mode="embedded" ctrlKeys="^a^q^r^s^d"
onCtrlKey="@command('doFireCtrlKeyEvent',code=event.getKeyCode())">
..在我的Java ViewModel中我使用了以下方法,这个方法将捕获事件并将其传递给相应的ViewModel
:
@Command
public void doFireCtrlKeyEvent(@ContextParam(ContextType.VIEW) Component view, @org.zkoss.bind.annotation.BindingParam("code") String ctrlKeyCode) {
int keyCode = Integer.parseInt(ctrlKeyCode);
String ctrlKey = "";
switch (keyCode) {
case 65:
ctrlKey = "CTRL+A";
break;
case 81:
ctrlKey = "CTRL+Q";
break;
case 82:
ctrlKey = "CTRL+R";
break;
case 83:
ctrlKey = "CTRL+S";
break;
case 68:
ctrlKey = "CTRL+D";
break;
}
Map map = new HashMap();
map.put("ctrlKeyCode", ctrlKey);
Tabpanel tabPanel = mainTab.getSelectedPanel();
Tab tab = mainTab.getSelectedTab();
Include inc = (Include) tabPanel.getChildren().get(0);
if (inc != null) {
if (inc.getFirstChild() instanceof Window) {
Window win = (Window) inc.getFirstChild();
Map maps = win.getAttributes();
Binder bind = (Binder) maps.get("binder");
if (bind == null)
return;
bind.postCommand("doCtrlKeyAction", map);
}
if (inc.getFirstChild() instanceof Hbox) {
Hbox hbox = (Hbox) inc.getFirstChild();
Map maps = hbox.getAttributes();
Binder bind = (Binder) maps.get("binder");
if (bind == null)
return;
bind.postCommand("doCtrlKeyAction", map);
}
}
}