Отправка формы при нажатии enter в Textarea
Я пробовал различные методы, чтобы получить форму для отправки при нажатии клавиши enter. Я знаю, что это работает с полем ввода, но поскольку это будет комментарий, он должен быть текстовой областью.
Это то, что я в настоящее время имею для формы, чтобы отправить с помощью кнопки.
$('.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, он отправит написать свой комментарий здесь...
Спасибо
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
в заголовок функции