還有一個問題: 我創建了一個inputfield並添加了一個AjaxFormComponentUpdatingBehavior(「onkeyup」)。現在我只想在按下右鍵(空格鍵)時執行一些代碼。 我怎麼能得到最後按下的按鍵?我認爲它會存儲在目標屬性中,但我無法在那裏找到它...有沒有簡單的方法可以解決這個問題?檢票關鍵事件 - >獲取鑰匙!
Thx guys! CU Sylvus
還有一個問題: 我創建了一個inputfield並添加了一個AjaxFormComponentUpdatingBehavior(「onkeyup」)。現在我只想在按下右鍵(空格鍵)時執行一些代碼。 我怎麼能得到最後按下的按鍵?我認爲它會存儲在目標屬性中,但我無法在那裏找到它...有沒有簡單的方法可以解決這個問題?檢票關鍵事件 - >獲取鑰匙!
Thx guys! CU Sylvus
我找到了解決方案,這要感謝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}" +
"}");
}
});
如果要捕獲密鑰,則不應使用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庫是可用的,這裏有一個唯一的檢票口的解決方案:
@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!!!')" + "}" + "}" + ");");
};
但這並不處理事件處理中的跨瀏覽器問題
如果你真的想發送每一個按鍵到服務器,是的。但是這麼做會帶來多大的帶寬浪費。 – 2010-08-14 23:09:42