还有一个问题:我创建了一个inputfield并添加了一个AjaxFormComponentUpdatingBehavior ("onkeyup")。现在,我只想在按下右键(空格键)的情况下执行一些代码。我怎样才能得到最后按下的键?我认为它会存储在目标属性中,但我在那里找不到它……有什么简单的方法可以解决这个问题吗?
伙计们!CU Sylvus
发布于 2010-08-02 16:25:15
多亏了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}" +
"}");
}
});发布于 2010-07-30 21:35:23
如果您想要捕获密钥,则不应使用AjaxFormComponentUpdatingBehavior。此行为是为更新表单组件模型的操作保留的。我可能会尝试单独使用javascript,特别是如果您使用的是mootools或prototype之类的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的解决方案:
@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!!!')" + "}" + "}" + ");");
};但这并不处理事件处理中的跨浏览器问题。
https://stackoverflow.com/questions/3369594
复制相似问题