Formulaire de soumission lorsque vous appuyez sur Entrée dans Textarea

J’ai essayé diverses méthodes pour obtenir un formulaire à soumettre lorsque vous appuyez sur la touche Entrée. Je sais que cela fonctionne avec un champ de saisie, mais comme il s’agira d’un commentaire, il doit s’agir d’une zone de texte.

C’est ce que j’ai actuellement pour le formulaire à soumettre avec un bouton.

$('.messageSubmit').live('click', function(){ var name = $(this).siblings('.messageTextarea').val(); var theid = $(this).attr('data-the_id'); var dataSsortingng = name; $.ajax({ dataType: 'json', url: "https://api.instagram.com/v1/media/"+$(this).attr('data-the_id')+"/comments?"+hash, type: "POST", data: "text="+dataSsortingng, success: function(data) { // finish load console.log(data, dataSsortingng, 'fail'); }, error: function(data) { var username = JSON.parse(localStorage.getItem('iguser')); var profilepic = JSON.parse(localStorage.getItem('iguserimg')); //console.log(data, dataSsortingng, 'succ'); $('.box[data-the_id="' + theid + '"]').children('.postMessage').children('.messageComments').append('
  • ' + username + '
    ' + dataSsortingng + '
  • '); $('.messageTextarea').val(''); // Remove comment from TextArea } }); return false; });

    Cela fonctionne comme il se doit. Je veux supprimer le bouton d’envoi et simplement soumettre le formulaire lorsqu’un utilisateur appuie sur la touche Entrée. Je sais que certaines personnes déconseillent cela, mais les utilisateurs de ce site Web seront habitués à bash des entrées à partir de Facebook, etc.

    J’ai essayé des méthodes telles à cela, mais cela ne semble pas fonctionner.

     $('.messageTextarea').keydown(function() { if (event.keyCode == 13) { this.form.submit(); return false; } }); 

    Voici mon code de formulaire

     

    Toute aide est la bienvenue. En outre, si quelqu’un sait comment append une fonction if qui empêchera le formulaire de soumettre avec la valeur par défaut actuelle dans Textarea, ce serait génial. Actuellement, avec la manière dont la zone de texte est configurée, si vous cliquez simplement sur Soumettre, il sera envoyé. Écrivez votre commentaire ici …

    Merci

    EDIT: Un travail de contournement pourrait-il être … Avoir un bouton à soumettre, comme d’habitude, mais masqué, et lorsque vous appuyez sur entrer, un appel est déclenché pour ce bouton? Mais alors … je rencontrais le même problème: entrer ne rien faire dans la zone de texte, sauf entrer dans une nouvelle ligne …

    essayez ce jsfiddle

    HTML:

     

    JS:

      $('.messageTextarea').keydown(function(event) { if (event.keyCode == 13) { $(this.form).submit() return false; } }).focus(function(){ if(this.value == "Write your comment here..."){ this.value = ""; } }).blur(function(){ if(this.value==""){ this.value = "Write your comment here..."; } }); $("form").submit(function(){ var name = $(this).siblings('.messageTextarea').val(); var theid = $(this).attr('data-the_id'); var dataSsortingng = name; $.ajax({ dataType: 'json', url: "https://api.instagram.com/v1/media/"+$(this).attr('data-the_id')+"/comments?", type: "POST", data: "text="+dataSsortingng, success: function(data) { // finish load console.log(data, dataSsortingng, 'fail'); }, error: function(data) { var username = JSON.parse(localStorage.getItem('iguser')); var profilepic = JSON.parse(localStorage.getItem('iguserimg')); //console.log(data, dataSsortingng, 'succ'); $('.box[data-the_id="' + theid + '"]').children('.postMessage').children('.messageComments').append('
  • ' + username + '
    ' + dataSsortingng + '
  • '); $('.messageTextarea').val(''); // Remove comment from TextArea } }); return false; });​​

    Un séjour sans faille

    Je pense que vous voudriez également donner aux utilisateurs la possibilité de passer à la nouvelle ligne en utilisant shift.

     $('.messageTextarea').on('keyup', function(e) { if (e.which == 13 && ! e.shiftKey) { // your AJAX call } }); 

    Voir ceci: http://jsfiddle.net/almirsarajcic/Gd8PQ/

    Cela a fonctionné pour moi.

    En outre, vous devez supprimer le bouton d’envoi que vous avez actuellement.

    essayez de cette façon

     

    Je l’ai testé et cela a fonctionné

    J’ai ajouté seulement l’ event paramètre à l’en-tête de la fonction