2010-07-30 65 views
2

還有一個問題: 我創建了一個inputfield並添加了一個AjaxFormComponentUpdatingBehavior(「onkeyup」)。現在我只想在按下右鍵(空格鍵)時執行一些代碼。 我怎麼能得到最後按下的按鍵?我認爲它會存儲在目標屬性中,但我無法在那裏找到它...有沒有簡單的方法可以解決這個問題?檢票關鍵事件 - >獲取鑰匙!

Thx guys! CU Sylvus

回答

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}" + 
      "}"); 
    } 
}); 
+1

如果你真的想發送每一個按鍵到服務器,是的。但是這麼做會帶來多大的帶寬浪費。 – 2010-08-14 23:09:42

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庫是可用的,這裏有一個唯一的檢票口的解決方案:

 @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!!!')" + "}" + "}" + ");"); 
     }; 

但這並不處理事件處理中的跨瀏覽器問題