我编写了一个代码,用于发送消息并向下滚动,然后用户按下"输入"键。你可以在下面看到它:
$(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留在textarea。它也不会向下滚动。我该怎么办?
抱歉我的错误代码
答案 0 :(得分:1)
问题是:当你点击回车时,你的功能会运行并做它需要做的事情,然后继续执行事件的默认行为(按下按键&#39;输入&#39;),它会跳转线。 (它并没有让#34; \ n&#34;它是在你的功能运行之前创建的)
我所做的是:在检查是否输入且目标是否正确的if
语句之后,调用preventDefault()
这将阻止通过回车键跳转该行。另外,请致电.focus()
以确保焦点位于textarea中,现在正在开始。
$(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();
}
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="message"></textarea>
&#13;
(我删除了你的AJAX帖子,以便能够在这里创建一个工作片段。)