我几乎整天都在努力实现我创建的功能的内置倒计时。
它指的是由jQuery和ajax处理的搜索函数
有input
字段允许输入关键字,我对从该字段读取的事件应用了超时,因此用户提供的每个字符都会重置超时。
只要您继续提供关键字,它就不会启动ajax请求,当您停止2秒后,它会自动执行该请求。
我想要的是显示一个毫秒倒计时,显示多少"时间"你离开了ajax请求继续。
因为现在它仅仅2秒我希望它采用那种格式0:00
显然,每次提供新角色时倒计时都会重置。
这是HTML:
<input type="text" id="search" />
<div id="response"></div>
和脚本
var keyupTimeoutID = 0;
$('#search').on('input', function () {
clearTimeout(keyupTimeoutID);
keyupTimeoutID = setTimeout(function () {
var srch = jQuery("#search").val();
// ajax request
alert('Handler has performer ajax request based on following keywords: ' + srch);
}, 2000);
});
答案 0 :(得分:2)
据我所知,setTimeout
不适合您,因为每次要更新显示时需要执行一些代码(每秒几次),而此方法仅用于执行一次。当然,你可以设置一系列超时,每一次都设置下一次,但这既麻烦又不太可能准确地保持时间。
如果您需要定期执行某些操作(在这种情况下),您可以使用setInterval代替,如下所示:
<input id="search"> <span id="remainingTimeDisplay"></span>
function programCountDown(){
$("#search").keydown(function(){
counter.reset({
onFinish : function(){
alert("Time's up!");
}
});
});
}
var counter = {
interval : null,
time : null,
initialTime : 2000,
stepTime : 10,
display : null,
init : function(){
this.display = $("#remainingTimeDisplay");
},
reset : function(pars){
this.onFinish = pars.onFinish;
if(this.interval){
clearInterval(this.interval);
}
this.time = this.initialTime;
this._displayTime();
this._set();
},
_set : function(){
this.interval = setInterval(function(){
counter.time -= counter.stepTime;
counter._displayTime();
if(counter.time <= 0){
clearInterval(counter.interval);
if($.isFunction(counter.onFinish)){
counter.onFinish();
}
}
}, counter.stepTime)
},
_displayTime : function(){
var digit1 = "" + Math.floor(counter.time / 1000);
var digit2 = "" + Math.floor((counter.time%1000) / 100);
var digit3 = "" + Math.floor((counter.time%100) / 10);
this.display.html(digit1 + "." + digit2 + digit3);
}
}
$(document).ready(function(){
counter.init();
programCountDown();
});
答案 1 :(得分:0)
你在找这样的东西吗?
<input type="text" id="search">
<div>seconds till submit: <span id="submitTimeout"></span></div>
$(function() {
var timeout = 5; // 5 seconds tmeout
var timeoutHandler = 0;
var intervalHandler = 0;
var secondsElapsed = 1;
$('#search').keyup(function(){
secondsElapsed = 1;
clearTimeout(timeoutHandler);
clearInterval(intervalHandler);
intervalHandler = setInterval(function() {
$('#submitTimeout').text(secondsElapsed);
secondsElapsed ++;
}, 1000);
timeoutHandler = setTimeout(function() {
clearTimeout(timeoutHandler);
clearInterval(intervalHandler);
$('#submitTimeout').text(secondsElapsed);
secondsElapsed = 1;
alert('value is submited to the server');
}, timeout*1000);
})
});
但它几乎可以满足您的需求。您可以将setInterval
功能与setTimeout
一起使用。
答案 2 :(得分:0)
var countClock = 0;
$(document).on('input', '#search', function() {
clearInterval(countClock);
var sec = 3
countClock = setInterval(function(){
sec --;
$("#displayclock").html("0:0" + sec);
if (sec===0) {
clearInterval(countClock);
sec=3;
var srch = jQuery("#search").val();
jQuery.ajax({
type: "POST",
url: "handler.php",
data: ({search: srch}),
success: function(response){
$('#response').html(response);
}
});
}
},1000);
});