【发布时间】:2016-01-27 15:13:55
【问题描述】:
我有一个表格,我公司的维护人员在一天结束时填写表格,描述他们当天做了什么。有些人有时会在手机上填写。他们抱怨说,如果接到电话或短信,他们会丢失他们输入的日志。
所以我所做的是通过 AJAX 将表单值存储到 PHP SESSION 变量中,并在表单重新加载时回显该变量,只要它们已登录。
这是输入字段之一:
<textarea class="form-control" name="8to10" id="d8to10" placeholder="8 to 10 am" rows="8">
<?php if(isset($_SESSION['d8to10'])){echo htmlspecialchars($_SESSION['d8to10'], ENT_QUOTES);} ?>
</textarea>
<span id="saved1"><span>
这是获取字段值并通过 AJAX 发送以存储到 SESSION 变量中的相应 Javascript。
$('#d8to10').on("keyup", function(){
var d8to10 = $(this).val();
$('#saved1').css('display', 'none');
d8to10 = encodeURIComponent(d8to10);
//console.log(d8to10);
var ajaxRequest;
clearTimeout(ajaxRequest);
ajaxRequest = setTimeout(function() {
$.ajax({
type: 'post',
url: 'Includes/dailyLogCacheLog.php',
data: 'd8to10=' + d8to10,
success: function(r) {
$('#saved1').css('display', 'inline');
$('#saved1').html('<p>Saved</p>');
}
});
}, 3000, d8to10);
});
所以我现在想做但不知道如何做正确的是,在他们键入时每 5 或 10 秒抓取一次变量并将其保存在那个时间范围内。这是因为现在在输入每个字母后都会调用 AJAX,并且他们抱怨保存的消息闪烁过多。
有人知道怎么做吗?
【问题讨论】:
-
当用户点击按钮/提交表单时你为什么不更新???
-
将
keyup回调放入setTimeout中,延迟 5 秒。 -
这将要求用户单击按钮,问题是他们在填写表单时有时会收到随机电话或短信,并且无法单击按钮当这种情况发生时。
-
将您的函数包装在另一个
setTimeout(<func>,<msec>);中,以创建一个计时器事件,而不是每个按键上的事件。 keyup 上的事件不是必需的。 -
对于自动保存使用 localStorage ... 不需要额外的服务器负载来发出所有这些请求。提交成功后清除存储
标签: javascript php jquery ajax