从 textarea 中删除文本,然后按回车键
Remove text from textarea then pressing enter key
我编写了一个代码,发送一条消息并向下滚动,然后用户按下 "Enter" 键。你可以在下面看到它:
$(document).keypress(function (e) {
var target = $(e.target);
if (e.which == 13 && target.is('#message')) {
message = $('#message').val();
if (message && /\S/.test(message)) {
$.post('/users/send', {
roomId: room.id,
message: message
}).done(function (res) {
var response = JSON.parse(res);
var lastmsg = JSON.parse(response.messages[response.messages.length - 1]);
var lastmsgDate = new Date(lastmsg.date);
if ('{{user.imgUrl}}') {
$('#messages').append('<div class="container"><div class="my-message"><p>' + message + '</p><small class="date">' +
lastmsgDate.getHours() + ':' + lastmsgDate.getMinutes() + '</small><img src="' + lastmsg.img + '" alt="avatar"></div></div>');
} else {
$('#messages').append('<div class="container"><div class="my-message"><p>' + message + '</p><small class="date">' +
lastmsgDate.getHours() + ':' + lastmsgDate.getMinutes() + '</small></div></div>');
}
});
var height = $('#messages')[0].scrollHeight;
$('#messages').scrollTop(height);
$('#message').val('');
}
}
});
我认为它应该可以正常工作,但\n 停留在文本区域。此外,它不会向下滚动。我该怎么办?
对不起我的错误代码
问题是:当你按下回车键时,你的函数运行并做它需要做的事情,然后它继续事件的默认行为(按下键 'Enter'),所以它跳了一行. (它没有让“\n”在你的函数之前被创建运行)
我所做的是:在 if
语句检查输入是否正确且目标是否正确之后,调用 preventDefault()
这将防止该行被回车键跳转。另外,调用 .focus()
以确保焦点在文本区域中,现在在开头。
$(document).keypress(function (e) {
var target = $(e.target);
if (e.which == 13 && target.is('#message')) {
e.preventDefault()
message = $('#message').val();
if (message && /\S/.test(message)) {
//ADD your logic and call here
//...
$('#message').val('');
$('#message').focus();
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="message"></textarea>
(我删除了您的 AJAX post 调用,以便能够在此处创建工作代码段。)
我编写了一个代码,发送一条消息并向下滚动,然后用户按下 "Enter" 键。你可以在下面看到它:
$(document).keypress(function (e) {
var target = $(e.target);
if (e.which == 13 && target.is('#message')) {
message = $('#message').val();
if (message && /\S/.test(message)) {
$.post('/users/send', {
roomId: room.id,
message: message
}).done(function (res) {
var response = JSON.parse(res);
var lastmsg = JSON.parse(response.messages[response.messages.length - 1]);
var lastmsgDate = new Date(lastmsg.date);
if ('{{user.imgUrl}}') {
$('#messages').append('<div class="container"><div class="my-message"><p>' + message + '</p><small class="date">' +
lastmsgDate.getHours() + ':' + lastmsgDate.getMinutes() + '</small><img src="' + lastmsg.img + '" alt="avatar"></div></div>');
} else {
$('#messages').append('<div class="container"><div class="my-message"><p>' + message + '</p><small class="date">' +
lastmsgDate.getHours() + ':' + lastmsgDate.getMinutes() + '</small></div></div>');
}
});
var height = $('#messages')[0].scrollHeight;
$('#messages').scrollTop(height);
$('#message').val('');
}
}
});
我认为它应该可以正常工作,但\n 停留在文本区域。此外,它不会向下滚动。我该怎么办?
对不起我的错误代码
问题是:当你按下回车键时,你的函数运行并做它需要做的事情,然后它继续事件的默认行为(按下键 'Enter'),所以它跳了一行. (它没有让“\n”在你的函数之前被创建运行)
我所做的是:在 if
语句检查输入是否正确且目标是否正确之后,调用 preventDefault()
这将防止该行被回车键跳转。另外,调用 .focus()
以确保焦点在文本区域中,现在在开头。
$(document).keypress(function (e) {
var target = $(e.target);
if (e.which == 13 && target.is('#message')) {
e.preventDefault()
message = $('#message').val();
if (message && /\S/.test(message)) {
//ADD your logic and call here
//...
$('#message').val('');
$('#message').focus();
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="message"></textarea>
(我删除了您的 AJAX post 调用,以便能够在此处创建工作代码段。)