【发布时间】:2023-04-03 03:23:02
【问题描述】:
我有一个fiddle,下面还有相同的代码。
我想实现这个 --> 用户输入一个(通常)4 位数字,完成后,我想运行 AJAX 调用。
我一直在努力解决,但到目前为止它不起作用。
var delay = (function() {
var timer = 0;
return function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();
$('order').keyup(function(e) {
delay(function() {
if (e.which >= 48 && e.which <= 57) {
console.log("INSIDE");
$.ajax({
type: "POST",
dataType: "json",
url: "/echo/json/",
data: 'order=' + $(this).val(),
cache: false,
success: function(json) {
$('#ref_job').empty();
$.each(json, function(i, value) {
$('#ref_job').append($('<option>').text(value).attr('value', value));
});
}
});
}
}, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<input type="text" id="order" />
【问题讨论】:
-
你如何确定输入的结尾?字段中的数字计数?
-
最好在用户停止输入后(可以由“用户在最后 1000 毫秒内没有输入任何内容”的条件来确定)。作为后备,我可以检查它是否是 4 位数。
-
Lodash 和 Underscore 具有可能对此有所帮助的
debounce函数。本质上,您在每次击键时调用 debounced 函数,然后您的包装函数只会在 1000 毫秒或您设置的任何时间后被调用。
标签: javascript jquery timer delay settimeout