2010-07-30 20 views
2

encore une question: J'ai créé un champ d'entrée et ajouté un AjaxFormComponentUpdatingBehavior ("onkeyup"). Maintenant, je veux exécuter du code seulement si la touche droite (espace-clé) est pressée. Comment puis-je obtenir la dernière touche enfoncée? Je pensais qu'il serait stocké dans l'attribut target, mais je ne pouvais pas le trouver là ... Y at-il un moyen facile de résoudre ce problème?Wicket événement clé -> obtenir la clé!

Thx les gars! CU Sylvus

Répondre

0

J'ai trouvé la solution, grâce à Google et 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

Si vous voulez vraiment envoyer chaque touche unique au serveur, oui. mais quel gaspillage de bande passante pour le faire. –

1

Vous ne devez pas utiliser AjaxFormComponentUpdatingBehavior si vous voulez capturer des clés. Ce comportement est réservé aux actions qui mettent à jour le modèle de composant de formulaire. J'essaierais probablement de le faire uniquement dans javascript, surtout si vous utilisez un framework javascript comme mootools ou prototype. Voici quelques exemples de code pour Mootools (pas besoin de l'envoyer au serveur):

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

    })); 

si aucune bibliothèque js est disponible, voici une solution de guichet seule:

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

mais cela ne gérer les problèmes de navigateur dans la gestion des événements