javascript - 如何在 jQuery 中为 oninput 添加延迟
问题描述
我有以下功能,用户点击输入新键,保存到数据库中。但问题是我的输入被保存到数据库中作为 1,12,123,124,1245,12456 ......等等?我如何输入整个值。?
wo_input.oninput = function() {
if (wo_input.value) {
if (wo_input.value.length > 0) {
saveOnChange(wo_input.value, 'wo_number');
} else { }
} else { }
}
保存更改功能
function saveOnChange(val, type) {
var diagnosis_id = $('#diagnosis_id').val();
console.log(val + " : " + type + " : " + diagnosis_id);
$.post('/diagnosis/saveOnChange', {
'_token': '{{ csrf_token() }}',
'diagnosis_id': diagnosis_id,
'value': val,
'type': type
}, function(success) {
console.log(success);
if (success.redirect) {
//window.location.href = '/diagnosis/edit/' + success.id;
window.history.pushState('edit', 'Title', '/diagnosis/edit/'+success.id);
}
});
}
HTML
<input class="saveonchange add_media id_input" type="text" name="wo_number" value="" id="wo_input"/>
解决方案
您可以setTimeout()
在某个延迟后检查是否在该延迟后没有更改。如果没有,则将其保存到您的数据库中。
使用new Date().getTime()
您可以获得自 1970/01/01 以来的毫秒数,您可以将其用于检查。
下面的示例在 2 秒内没有输入时记录控制台消息。
const ms = 2000;
$('#test').on('input', (e) => {
$(e.currentTarget).data('updated', new Date().getTime());
setTimeout(() => {
if(new Date().getTime() - ms >= $(e.currentTarget).data('updated')) {
console.log(`${ms}ms past. Go save!`);
}
}, ms);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="test">
推荐阅读
- c# - 在 C#.net API 中为所有场景添加 Json 响应
- matlab - matlab:禁止图例条目而不从绘图浏览器中删除
- javascript - 提取网页的一部分?
- daml - 显示 DAML 合约的“协议”字段
- ios - 用相交的 UIBezierPath 屏蔽 UIEffectView
- sonarqube - 在 Travis-CI 构建中,如何仅在主分支上调用 SonarQube
- amazon-web-services - 从 lambda(节点 js)发布 SNS 消息导致超时错误
- .net - 动态 crm 365 web api 身份验证,获得令牌,但我得到对实体 C# 的未经授权的调用。净核
- r - R:单纯形错误:下标分配中不允许使用 NA
- javascript - 使用上下文菜单单击 DataTable 行