2011-09-24 10 views
0

Mes utilisateurs souhaitent que ce formulaire passe au point suivant lorsque vous appuyez sur Entrée au lieu de soumettre le formulaire. J'ai ajouté un gestionnaire onkeypress à l'entrée de test pour changer la mise au point lorsque vous appuyez sur entrée.Annulation d'un événement onkeypress après un changement de focus

Dans le code ci-dessous, lorsque la fonction de gestion des touches change de focus, je vois le curseur sauter dans la nouvelle zone de texte mais le formulaire est soumis comme si j'appuyais à nouveau sur la touche Entrée. Je pensais qu'en retournant false dans mon gestionnaire d'événement, l'événement ne serait pas transmis mais cela ne semble pas être le cas. J'ai vu ce comportement dans Chrome et Firefox.

Quelqu'un pourrait-il me dire ce que je manque?

<form action="" name="confirmation" method="post"> 
    <fieldset> 
     <div class="clearfix"> 
      <label for="id_event_fuel_amount">Quantity:</label> 

      <div class="input"> 
       <input type="text" id="event_fuel_amount_id" name="event_fuel_amount" onkeypress="keydown(event, &#39;event_purchase_amount_id&#39;)" /> 

      </div> 
     </div> 
     <div class="clearfix"> 
      <label for="id_event_purchase_amount">Sale:</label> 

      <div class="input"> 
       <input type="text" id="event_purchase_amount_id" name="event_purchase_amount" /> 

      </div> 
     </div> 


     <input type="hidden" name="state" value="3" id="id_state" /> 

     <input type="hidden" name="time_stamp" value="2011-09-24 14:34:06" id="id_time_stamp" /> 

     <input type="hidden" name="purchase" value="66" id="id_purchase" /> 


     <input type="submit" value="Save"/> 
    </fieldset> 
</form> 

<script> 
    function keydown(e,s){ 
     if (!e) var e = window.event; 
     if (e.keyCode) code = e.keyCode; 
     else if (e.which) code = e.which; 
     if (code==13){ 
      document.getElementById(s).focus(); 
      return false; 
     } 
    } 
</script> 
+0

est l'attribut 'onkeypress' vraiment nécessaire? Lier l'événement par programmation serait une meilleure option ... (car alors vous n'auriez pas à exposer votre fonction 'keypress' à l'espace de noms global) –

Répondre

0

Essayez

e.preventDefault(); 

Cela devrait empêcher l'événement de tirer la forme soumettre.

+0

A travaillé !!! Merci. – dgajohnson

0

Je pense que cela pourrait aider:

<script type="text/javascript"> 
document.getElementById('hello').onkeydown=function(e){ 
    var e=window.event || e; 
    if (e.keyCode == 13) return false; 
} 
</script> 
<input type="text" id="hello" /> 

Voici une démo: jsFiddle demo

Questions connexes