JavaScript's setTimeout函数进行意外的多次调用
JavaScript's setTimeout function making unexpected, multiple calls
我试图用下面的代码来简化我遇到的问题。一些代码依赖于jQuery,供参考。
基本上,我希望当点击"新事物"时,会出现一条警告消息。但是,如果启动计时器,单击"New Thing"会导致意外行为,即出现的警报消息数量等于经过的时间。
这个问题快把我毁了。
为了彻底起见,我包含了一个完整的示例。我知道这有点长。 <>之前$(文档)时函数(){mainLoop ();});Var counter = 0;var timeison = 0;var t;函数mainLoop() {handleInput ();计时器();}函数timerHandle() {如果(! timerIsOn) {timerIsOn = 1;计时器();}}函数计时器(){if (timerIsOn) {t = setTimeout(mainLoop, 1000);计数器+ +;$("跨度")。text(柜台);//显示经过的时间}}//只是简单的按钮函数handleInput () {$(" #计时器").click (timerHandle);$(" #新").click(造);}函数Thing() {this.talk ();}Thing.prototype.talk = function() {alert("你好! ");}函数createThing() {新事物;}之前我真的很感谢你的帮助!这是因为您为按钮的单击事件添加了多个事件处理程序
function timer(){
if (timerIsOn) {
t = setTimeout(mainLoop, 1000);
counter++;
$("span").text(counter); // To display the elapsed time
} }
如果超时触发,它将执行mainLoop。哪个会调用handleInput和handleInput连接一个额外的事件处理程序到click事件。
function handleInput(){
$("#timer").click(timerHandle);
$("#new").click(createThing); }
如果计时器正在运行并且已经触发了3次,则维护。点击#new或#timer将调用相应的函数(timerHandle, createThing) 3次
问题是您注册了许多次事件处理程序。每次你调用
$("#timer").click(timerHandle);
注册一个新的事件处理程序。这意味着,当div被单击时,timerHandle将运行与上面调用的次数相同的次数。您可以使用unbind来避免这种情况:
$("#timer").unbind('click');
$("#timer").click(timerHandle);
move:
handleInput();
:
document ready function
相关文章:
- “语法错误:意外的令牌)”在 javascript 调用中,当 eval(value) 为空时
- 对方法或属性访问的意外调用
- Ajax调用后出现意外的标识符错误
- AJAX rest调用错误”;意外的令牌<&”;
- 对jQuery中IE8的方法或属性访问的意外调用
- 对方法或属性访问的意外调用.在JQUERY
- XDomainRequest onload上对方法或属性访问的意外调用
- 调用加载的顺序函数会意外中断代码
- PHP调用脚本函数,返回值为Uncaught SyntaxError:意外的令牌ILLEGAL
- 意外令牌:在jQuery ajax调用中
- (仅在IE中)SCRIPT65535:对方法或属性访问的意外调用.主.js,第 152 行字符 28
- IE8 附录子项“对方法或属性访问的意外调用”
- 0x8000ffff JavaScript运行时错误对方法或属性访问的意外调用
- 意外调用方法或属性访问-appendChild()
- this.appendChild(a) -意外调用方法或属性访问
- IE中奇怪的jQuery错误:对方法或属性访问的意外调用
- jQuery .find()错误:"意外调用方法或属性访问"
- 对方法或属性访问的意外调用
- 对方法或属性访问的意外调用.在IE中使用appendChild()
- 谷歌地图将无法在IE7中加载:'意外调用方法或属性访问'