如何在按键时停止通过 aJax 重新发送脚本?
How to stop resending script through aJax while pressing key?
我有一个脚本,可以在按下回车键时将消息存储到数据库中。
<textarea class="comment" name="comment" id="comment" onKeyPress="return checkSubmit(event)" onKeyDown="return checkTypingStatus(event)" >Comment/Reply</textarea>
function checkSubmit(e)
{
if(e && e.keyCode === 13)
{
var sender = <?=$_REQUEST['sender'];?>;
var user_id = <?=$_SESSION['userid'];?>;
var cid = <?=$_REQUEST['cid'];?>;
var comment = $("#comment").val();
comment = encodeURIComponent(comment);
var dataString = 'sender='+ sender + '&user_id=' + user_id + '&comment=' + comment + '&cid=' + cid;
if(comment=='' || comment=='Comment%2FReply')
{
alert('Please Give some text into message box.');
}
else
{
$("#flash").show();
$("#flash").fadeIn(400).html('<img src="images/ajax-loading.gif" align="absmiddle"> <span class="loading">Sending Message...</span>');
$.ajax({
type: "POST",
url: "ajax_comment.php",
data: dataString,
cache: false,
success: function(html){
$("p#update").append(html);
$("p#update").fadeIn("slow");
document.getElementById('comment').value='';
$("#comment").focus();
$("#flash").hide();
}
});
}
return false;
}
}
一切正常,除非用户长时间按下回车键,相同的消息会被存储多次,直到松开回车键。
我已经尝试过使用 onKeyUp 事件的相同脚本。但是脚本无法正常工作。
只需锁定以禁用 ajax 请求,直到最后一个请求完成:
var lock = false;
function checkSubmit(e)
{
if(e && e.keyCode === 13 && !lock)
{
lock = true;
....
$.ajax({
....
success: function(html){
lock = false;
...
另一个选项可能是禁用文本区域并检查它是否被禁用而不是使用锁,但我认为你已经理解了这个例子。
我有一个脚本,可以在按下回车键时将消息存储到数据库中。
<textarea class="comment" name="comment" id="comment" onKeyPress="return checkSubmit(event)" onKeyDown="return checkTypingStatus(event)" >Comment/Reply</textarea>
function checkSubmit(e)
{
if(e && e.keyCode === 13)
{
var sender = <?=$_REQUEST['sender'];?>;
var user_id = <?=$_SESSION['userid'];?>;
var cid = <?=$_REQUEST['cid'];?>;
var comment = $("#comment").val();
comment = encodeURIComponent(comment);
var dataString = 'sender='+ sender + '&user_id=' + user_id + '&comment=' + comment + '&cid=' + cid;
if(comment=='' || comment=='Comment%2FReply')
{
alert('Please Give some text into message box.');
}
else
{
$("#flash").show();
$("#flash").fadeIn(400).html('<img src="images/ajax-loading.gif" align="absmiddle"> <span class="loading">Sending Message...</span>');
$.ajax({
type: "POST",
url: "ajax_comment.php",
data: dataString,
cache: false,
success: function(html){
$("p#update").append(html);
$("p#update").fadeIn("slow");
document.getElementById('comment').value='';
$("#comment").focus();
$("#flash").hide();
}
});
}
return false;
}
}
一切正常,除非用户长时间按下回车键,相同的消息会被存储多次,直到松开回车键。
我已经尝试过使用 onKeyUp 事件的相同脚本。但是脚本无法正常工作。
只需锁定以禁用 ajax 请求,直到最后一个请求完成:
var lock = false;
function checkSubmit(e)
{
if(e && e.keyCode === 13 && !lock)
{
lock = true;
....
$.ajax({
....
success: function(html){
lock = false;
...
另一个选项可能是禁用文本区域并检查它是否被禁用而不是使用锁,但我认为你已经理解了这个例子。