还有一个问题: 我创建了一个inputfield并添加了一个AjaxFormComponentUpdatingBehavior(“onkeyup”)。现在我想只在按下右键(空格键)时执行一些代码。 我怎么能得到最后一个按键?我以为它会存储在目标属性中,但我找不到它......有没有简单的方法可以解决这个问题?
Thx伙计们! CU Sylvus
答案 0 :(得分:1)
如果要捕获密钥,则不应使用AjaxFormComponentUpdatingBehavior。此行为保留用于更新表单组件模型的操作。我可能会尝试单独使用javascript,特别是如果你使用像mootools或原型的javascript框架。以下是mootools的一些示例代码(无需将其发送到服务器):
this.add(new TextField<String>("textField").add(new AbstractBehavior(){
private static final long serialVersionUID = 1L;
private Component component;
@Override
public void bind(final Component component){
this.component = component.setOutputMarkupId(true);
}
@Override
public void renderHead(final IHeaderResponse response){
response.renderOnDomReadyJavascript(
"$('" + this.component.getMarkupId() + "')" +
".addEvent('keyup',function(event){" +
"if(' '==event.key){" +
"alert('you pressed space!!!')" +
"}" +
"}" +
");");
};
}));
如果没有可用的js库,这里只是一个wicket-only解决方案:
@Override
public void renderHead(final IHeaderResponse response){
response.renderJavascriptReference(WicketEventReference.INSTANCE);
response.renderOnDomReadyJavascript("Wicket.Event.add('"
+ this.component.getMarkupId()
+ "',onkeyup',function(event){" + "if(' '==event.key){"
+ "alert('you pressed space!!!')" + "}" + "}" + ");");
};
但这并不涉及事件处理中的跨浏览器问题
答案 1 :(得分:0)
我找到了解决方案,感谢Google和Firebug。
searchInput.add(new AbstractBehavior() {
private static final long serialVersionUID = 1L;
private Component component;
@Override
public void bind(final Component component) {
this.component = component.setOutputMarkupId(true);
}
@Override
public void renderHead(final IHeaderResponse response) {
response.renderJavascriptReference(WicketEventReference.INSTANCE);
response.renderOnDomReadyJavascript("document.getElementById('" +
this.component.getMarkupId() + "').onkeyup=function(event){\n" +
"if(32==event.keyCode){\n" + "alert('you pressed space!!!')" + "\n}" +
"}");
}
});