13 votes

Détecter le type de soumission, s'il s'agit d'une touche d'entrée ou d'un clic sur un bouton

J'ai le code suivant :

    <head>
        <script language="javascript">
            function subimiti(event){
                alert("Tipo do submit: "+event);
            }
        </script>
    </head>
    <body>
        <form id="f1" name="form1" onsubmit="subimiti(event)" action="http://www.google.com">
            <input type="text" id="meuId" value="Teste"/>
            <input id="butao" type="submit" value="Subimeta u fórmi trem bão!!"/>
        </form>

Dans ma fonction JavaScript, je veux détecter l'événement qui provoque la soumission du formulaire. Si c'est par une touche entrée dans mon champ de texte, ou si c'est en cliquant sur le bouton.

5voto

Fabi Points 600

Puisque l'événement keypress déclenche l'événement click lorsqu'il y a un bouton submit, la seule solution à laquelle je peux penser est d'avoir un type=button à la place.

Javascript pur ( Violon ) :

<form id="f1" name="form1" action="" onsubmit="subimiti(this)" method="POST">
  <input type="text" id="meuId" value="Test" onkeypress="setEvent(event)"/>
  <input id="butao" type="button" onclick="setEvent(event)" value="Subimeta u formi trem bao!!"/>
</form>

function subimiti(form)
{
  event.preventDefault();
  alert(form.getAttribute('event'));   

}

function setEvent(event)
{
 if(event.type == 'click')
 {
   document.form1.setAttribute('event','click');
   subimiti(document.form1);
 }
 else if (event.keyCode == 13)
 {
   document.form1.setAttribute('event','keypress');
 }
}

Utilisation de jQuery (code plus propre/facile à mon avis) :

$(function(){
  $('form').submit(function(){
    alert($(this).attr('event'));
  });

  $("input#butao").on('click', function(e) {
    $("form").attr("event", "click").submit();
  });      

  $("input").on('keypress', function(e) {
    if (e.which == 13)
    {
      $("form").attr("event", "keypress");
    }
  });            
}); 

Il y a un écouteur de clic pour le butao seulement et un écouteur d'entrée pour toute entrée.

<form id="f1" name="form1" action="">
  <input type="text" id="meuId" value="Teste"/>
  <input id="butao" type="button" value="Subimeta u formi trem bao!!"/>
</form>

Violon (a ajouté preventDefault à fiddle pour que vous puissiez voir les résultats sans les soumettre)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X