2010-09-03 4 views
1

J'ai une page qui a une liste de table par pagination AJAX, tous personnalisés. La pagination fonctionne correctement, mais la touche Entrée efface les valeurs d'entrée du formulaire au lieu de les soumettre. Mon bouton de soumission génère un message AJAX qui provoque la réexécution et la réexécution de la table.JSF2: Soumettre le formulaire AJAX

Comment puis-je m'assurer que toutes les entrées de formulaire gèrent le bouton Entrée et soumettent le formulaire AJAX?

Ceci est mon bouton Envoyer:

<f:ajax execute="@form" render=":formlistproposta" onevent="showProgress"> 
    <h:commandLink styleClass="link" value="#{msg.menu_search_top_all}"  
       actionListener="#{propostaBean.search}" onclick="clearForm();"> 
    </h:commandLink> 
</f:ajax> 

Comment puis-je faire en sorte que chaque fois que j'appuyez sur Entrée sur une des entrées de la forme de mon AJAX sera soumis?

Répondre

2

Je l'ai résolu par jQuery, similaire à la solution de @ mmanco:

$('form input[type=text]').die('keydown').keydown(function(e){ 
    if(e.keyCode == 13) { 
     $('form\\:submitButton').click(); 
     return false; 
    } 
}); 
2

Tout d'abord, le comportement que vous décrivez est correct. Dans une page HTML simple en appuyant sur la touche Entrée dans un formulaire, le premier bouton sera sélectionné et cliqué. Dans votre cas, un bouton <input type="reset"/> est probablement le premier du formulaire. J'ai utilisé prototype pour y parvenir.

Voici un exemple du script qui traitera la soumission de formulaire lorsque la touche Entrée est pressée:

var FormSubmissionHandler = Class.create({ 
    initialize: function(formId, submitterId) { 
     this.form = $(formId); 
     this.submitter = $(submitterId); 
     Event.observe(this.form, 'keypress', this.onKeyPress.bindAsEventListener(this)); 
    }, 

    onKeyPress: function(event) { 
     var code = event.keyCode; 
     var element = Event.element(event); 
     if(code == Event.KEY_RETURN) { 
      var nodeName = element.nodeName; 
      var isSelect = nodeName == 'SELECT'; 
      var isTextArea = nodeName == 'TEXTAREA'; 

      if(!isSelect && !isTextArea) { 
       Event.stop(event); 
       this.submitter.click(); 
      } 
     } 
    } 
}); 
+0

Bien que votre code semble correct, il ne peut pas être appliqué à mon exemple d'écouteur d'action JSF spécifié avec actionListener = "# {propostaBean.search}". Dans votre cas, vous n'appelez pas l'écouteur d'action, soumettez seulement le formulaire –

+1

Votre actionListener sera appelée avec ce script. S'il vous plaît noter que vous devez spécifier l'identifiant de l'expéditeur dans ce cas, votre votre commandeConnexion. Cela appellera la fonction d'événement attachée par f: ajax. –

Questions connexes