Отправка формы при нажатии 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
в заголовке функции