Отправка формы при нажатии enter в Textarea

Я пробовал различные методы, чтобы получить форму для отправки при нажатии клавиши ввод. Я знаю, что это работает с полем ввода, но поскольку это будет комментарий, это должна быть текстовая область.

это то, что я в настоящее время имею для формы, чтобы отправить с помощью кнопки.

$('.messageSubmit').live('click', function(){
    var name = $(this).siblings('.messageTextarea').val();
    var theid = $(this).attr('data-the_id');
    var dataString = name;

    $.ajax({
        dataType: 'json',
        url: "https://api.instagram.com/v1/media/"+$(this).attr('data-the_id')+"/comments?"+hash,
        type: "POST",
        data: "text="+dataString,
        success: function(data) {
            // finish load
            console.log(data, dataString, 'fail');
        },
        error: function(data) {
            var username = JSON.parse(localStorage.getItem('iguser'));
            var profilepic = JSON.parse(localStorage.getItem('iguserimg'));
            //console.log(data, dataString, 'succ');

            $('.box[data-the_id="' + theid + '"]').children('.postMessage').children('.messageComments').append('<li><img class="commentUserImg" src="' + profilepic + '"><div class="commentUser">' + username + '</div><div class="commentText">' + dataString + '</div></li>');

            $('.messageTextarea').val(''); // Remove comment from TextArea
        }
    });
    return false;
});

Он работает как надо. Я хочу удалить кнопку отправки и просто отправить форму, когда пользователь нажимает клавишу enter. Я знаю, что некоторые люди советуют против этого, но пользователи на этом сайте будет использоваться для нажатия enter из Facebook и тому подобное.

Я пробовал такие методы, но, похоже, они не работают.

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

вот мой код

<form>
   <textarea class="messageTextarea" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;">Write your comment here...</textarea>
    <input type="submit" data-the_id="' + theid + '" name="submit" class="messageSubmit" id="submit_btn" value="Submit your comment">
 </form>

любая помощь будет большое. Кроме того, если кто-то знает, как добавить функцию if, которая предотвратит отправку формы с текущим значением по умолчанию в Textarea, это было бы потрясающе. В настоящее время, с тем, как textarea настроен сейчас, если вы просто нажмете submit, он будет submit напишите свой комментарий здесь...

спасибо

EDIT: может ли работа вокруг быть... Наличие кнопки для отправки, как обычно, но она скрыта, и когда вы нажмете enter, это вызовет вызов этой кнопки? Зато... Я столкнулся с той же проблемой ввода, ничего не делая в текстовом поле, кроме как разбиться на новую строку...

3 ответов


попробуй такое jsfiddle

HTML-код:

<form>
   <textarea class="messageTextarea">Write your comment here...</textarea>

 </form>​

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 dataString = name;

    $.ajax({
        dataType: 'json',
        url: "https://api.instagram.com/v1/media/"+$(this).attr('data-the_id')+"/comments?",
        type: "POST",
        data: "text="+dataString,
        success: function(data) {
            // finish load
            console.log(data, dataString, 'fail');
        },
        error: function(data) {
            var username = JSON.parse(localStorage.getItem('iguser'));
            var profilepic = JSON.parse(localStorage.getItem('iguserimg'));
            //console.log(data, dataString, 'succ');

            $('.box[data-the_id="' + theid + '"]').children('.postMessage').children('.messageComments').append('<li><img class="commentUserImg" src="' + profilepic + '"><div class="commentUser">' + username + '</div><div class="commentText">' + dataString + '</div></li>');

            $('.messageTextarea').val(''); // Remove comment from TextArea
        }
    });

    return false;
});
​
​


Я думаю, вы также хотите дать пользователям возможность перейти на новую строку с помощью shift.

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

смотрите:http://jsfiddle.net/almirsarajcic/Gd8PQ/

это сработало для меня.

кроме того, вам нужно удалить эту кнопку отправки, которую вы в настоящее время имеете.


попробуйте так

<form method="post" action="">
    <textarea></textarea>
</form>

<script type="text/javascript" src="./lib/js/jquery/jquery-1.8.1.min.js"></script>

<script type="text/javascript">
    jQuery('textarea').keydown(function(event) {
        if (event.keyCode == 13) {

            this.form.submit();
            return false;
         }
    });
</script>

Я тестировал его, и он работал

я добавил только параметр event в заголовке функции