我是jquery和javascript的新手。我需要在javascript中设置一个变量,每秒后递增1。为此,我做了以下事情:
function run(){
timer++;
}// run ends here
setInterval(run,1000);
一旦变量值> 5,我想启用代码,每当有人在html页面中悬停iframe时,就会完成ajax请求。
在sinigle ajax请求之后我想重置timer = 0。
if(timer>5){
$("iframe").hover(function(){
$.ajax({
url: 'http://localhost/test.html',
cache: false,
data: 'html',
success: function(data,status) {
}
});
});
timer=0;
}
此过程应再次重复,计数器应再次从0开始到5,并且应再次激活ajax请求功能。
以下是一个地方的完整代码:
<script>
var i = 0;
var timer=0;
function run(){
timer++;
}// run ends here
setInterval(run,1000);
if(timer>5){
$("iframe").hover(function(){
$.ajax({
url: 'http://localhost/test.html',
cache: false,
data: 'html',
success: function(data,status) {
}
});
});
timer=0;
}
</script>
我尝试了很多并且google了很多,但是无法弄清楚解决方案。
答案 0 :(得分:6)
试试这个:
var timer=0;
function run(){
timer++;
if(timer == 5){
$("iframe").on('mouseenter', function(){
$.ajax({
url: 'http://localhost/test.html',
cache: false,
data: 'html',
success: function(data,status) {
timer=0;
$('iframe').off('mouseenter')
}
});
});
}
}// run ends here
setInterval(run,1000);
如果你已经在iframe上有了mouseenter事件,那么.off('mouseenter')
会删除那些绑定。
正如Ian所建议的那样,你可以命名为事件,允许你取消绑定特定的绑定。
要做到这一点,只需在绑定/解除绑定时使用一个点:
$("iframe").on('mouseenter.timer',...)
$('iframe').off('mouseenter.timer')
答案 1 :(得分:2)
使用函数memoization来避免全局“计时器”变量:
function run(){
run.timer = run.timer || 0;
return run.timer++;
} // run ends here
setInterval(run,1000);
要对计时器采取相应行动,请从run()
开始处理,例如:
function run(){
run.timer = run.timer || 0;
run.timer = handleTimer(run.timer++);
} // run ends here
setInterval(run,1000);
function handleTimer(timer) {
if(timer > 5){
$("iframe").hover(function(){
$.ajax({
url: 'http://localhost/test.html',
cache: false,
data: 'html',
success: function(data,status) {
}
});
// And disable hover handler once executed
$("iframe").unbind("mouseenter mouseleave");
});
return 0;
}
return timer; // continue timer chaining
}
答案 2 :(得分:0)
将if
语句放入run()
并将timer=0
移至AJAX通话的success
功能。
function run() {
timer ++;
if(timer == 5) {
//Your ajax here
}
}
你的AJAX success
看起来应该是success: function(data, status) { timer = 0;}
在你的AJAX成功中,你需要unbind
你的iframe
悬停,然后在timer > 5
时重新绑定它这样当计时器小于5时就会删除悬停功能。