我想写一个行为类似于谷歌翻译形式的代码。
当我在输入文本框中输入字母时,有 0.5
秒的延迟等待新输入。如果未收到新输入,则请求将发送到服务器,服务器将在输出文本框中返回结果。
我写了一些东西,但它不完整。你能帮我吗?!
$(document).ready(function(){
$('#source').keyup(function(){
var keyUpTime = $.now();
setTimeout(function(){
if($.now() - keyUpTime >= 500) {
sendValue($('#source').val());
}
},500);
});
});
function sendValue(str){
$.post("ajax.php",{ sendValue: str }, function(data){
$('#result_box').html(data.returnValue);
}, "json");
};
这就是我想要的:
var keyUpTime = 0;
var t = 0;
var executeAfterOneSecond = false;
$('#source').keyup(function(){
if(executeAfterOneSecond == false){
executeAfterOneSecond = true;
t = setTimeout(function(){
executeAfterOneSecond = false;
sendValue($('#source').val());
}, 600);
}
keyUpTime = $.now();
setTimeout(function(){
if($.now() - keyUpTime >= 200) {
clearTimeout(t);
executeAfterOneSecond = false;
sendValue($('#source').val());
}
},200);
});
如果字母之间的间隔小于 200 毫秒,则不发送请求。如果超过 600 毫秒,并且请求尚未发送,则请求将自动转发。如果字母之间的间隔超过 200 毫秒,则发送请求。
存储您的超时,以便在发生新事件时可以覆盖它,但在没有进一步提供的情况下发送。简单地说:
var ajaxTimeout = null;
$('#source').on('keyup', function(e){
var val = $(this).val();
if (ajaxTimeout){
clearTimeout(ajaxTimeout);
}
ajaxTimeout = setTimeout(function(){
sendValue(val);
}, 0.5e3); // 0.5 seconds
});