2017-07-24 10 views
1

J'ai un formulaire avec un seul textarea. Je veux le soumettre, mais seulement appuyez sur Entrez. Evénement par défaut quand sur textarea appuyez sur Entrez va à une nouvelle ligne, et je veux le changer.Soumettre textarea appuyez sur entrer

function textSubmit() { 
    $("textarea").on("keypress", function(e) { 
     if (e.keyCode == 13) { 
      e.preventDefault(); 
      $(this).parents('form').submit(); 
     } 
     else if (e.altKey && e.keyCode == 13) { 
     //else if (e.keyCode == 18 && e.keyCode == 13) { 
      e.preventDefault(); 
      $(this).val($(this).val() + "\n"); 
     } 
    }); 
} 

Comment puis-je faire le formulaire soumettre quand appuyez sur Entrée au lieu d'aller à une nouvelle ligne?

Répondre

2

Utilisation keydown au lieu de keypress que keypress ne se déclenche que lorsque est produit un caractère imprimable:

$("textarea").on("keydown", function(e) { 
 
    if(e.altKey && e.keyCode === 13) { 
 
     e.preventDefault(); 
 
     e.stopPropagation(); 
 
     $(this).val($(this).val() + "\n"); 
 
    } else if(e.keyCode === 13) { 
 
     e.preventDefault(); 
 
     e.stopPropagation(); 
 
     $(this).parents('form').submit();  
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form action="#" method="post"> 
 
    <textarea></textarea> 
 
</form>

0

Essayez cela, il faut gérer la touche alt:

function textSubmit() { 
 
    $(".textarea").on("keydown", function(e) { 
 
    if (e.keyCode === 13) { 
 
     e.preventDefault(); 
 
     if (e.altKey === true) { 
 
     $(this).val($(this).val() + "\n").focus(); 
 
     } else { 
 
     $(this).parents('form').submit(); 
 
     } 
 
    } 
 
    }); 
 
} 
 

 
textSubmit();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea class="textarea" placeholder="Text"></textarea>

0

Ce que vous faites mal, c'est que vous n'avez pas appelé votre fonction.Appelez votre fonction en faisant textSubmit() ou supprimez ce codeBlock à l'intérieur de votre fonction à l'environnement global.Et comme @Scott dit utiliser 'keyDown' au lieu de 'keyPress' comme 'keypress' ne relaie que le caractère résultant d'une frappe, et n'est appelé que s'il y en a un.

function textSubmit() { 
     $("textarea").on("keydown",function(e) { 
     if (e.altKey && e.keyCode === 13) { 
      e.preventDefault(); 
      $(this).val($(this).val() + "\n"); 
     } 
     else if (e.keyCode === 13) { 
      e.preventDefault(); 
      $(this).parents('form').submit(); 
     } 
    }); 
} 
textSubmit(); 

Ici, j'ai juste appelé la fonction et cela a bien fonctionné.

+0

La première instruction if sera toujours vraie même si l'utilisateur maintient la touche alt, ainsi le bloc else if n'est jamais atteint, la logique altKey doit être gérée à l'intérieur du e.keyCode === 13 si logique .. – Woodrow

+0

Ouais ..Vous avez raison.J'ai juste vérifié Pourquoi la chose "soumettre sur Entrée" ne fonctionne pas. Devrait être allé plus profond .. – Debabrata