使用 jQuery 在每个事件爆发时运行一次函数
我使用 jQuery 来监听 DOMSubtreeModified 事件,然后执行一个函数。我需要的是一种每次事件突发只运行一次函数的方法。因此,在这种情况下,事件只会在 1 秒后运行,并在 3 秒后再次运行。最好的方法是什么?
jQuery
$(function(){
setTimeout(function(){
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
},1000);
setTimeout(function(){
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
},3000);
$('#container').bind('DOMSubtreeModified',function(){
console.log('event');
functionToRun();
});
});
HTML
<div id="container"></div>
更新
setTimeout 函数只是为了模拟我的问题。我需要一个不更改 setTimeout 代码的解决方案。我遇到的问题是我收到了 DOMSubtreeModified 事件的爆发,并且每次爆发我只需要获得一个。
I'm using jQuery to listen to DOMSubtreeModified event, and then execute a function. What I need is a way to only run a function once per event burst. So in this case, the event will only run after 1 second, and again after 3 seconds. What is the best way to do this?
jQuery
$(function(){
setTimeout(function(){
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
},1000);
setTimeout(function(){
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
$('#container')[0].innerHTML = 'test';
},3000);
$('#container').bind('DOMSubtreeModified',function(){
console.log('event');
functionToRun();
});
});
HTML
<div id="container"></div>
Update
The setTimeout function are there just to emulate my problem. I need a solution without changing the setTimeout code. The problem I'm having is that I get burst of DOMSubtreeModified events, and I need to get only one per burst.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
替代方法,它将控制任何函数的速率。
Alternate method, which will control the rate of any function.
我自己解决了。
这会在 Firebug 控制台中打印 3 次事件,并且精确到 100 毫秒。
Solved it myself.
This prints out event 3 times in the Firebug console, and is accurate down to 100 ms.
尝试使用
one()
处理程序文档
try using
one()
handlerdocumentation
这似乎就是您正在寻找的:
这强制执行以下流程:
This seems to be what you're looking for:
This enforces the following flow: