Javascript 具有参数的函数的clearTimeout
我正在编写一个聊天应用程序,可以同时打开多个聊天窗口。每次打开窗口时,我都会调用函数update_chat()上的setInterval,该函数会更新单个聊天窗口。我将聊天室id传递给更新聊天室()Javascript 具有参数的函数的clearTimeout,javascript,setinterval,clearinterval,Javascript,Setinterval,Clearinterval,我正在编写一个聊天应用程序,可以同时打开多个聊天窗口。每次打开窗口时,我都会调用函数update_chat()上的setInterval,该函数会更新单个聊天窗口。我将聊天室id传递给更新聊天室() chat\u id只是聊天室的id。因此,我可以让功能update\u chat以不同的间隔运行多次,具体取决于打开的聊天次数。开始聊天很好 我的主要问题是如何停止上述间隔。我不想停止所有的时间间隔,只想停止与特定聊天相关的时间间隔。我试过这个 clearInterval("update_chat(
chat\u id
只是聊天室的id。因此,我可以让功能update\u chat
以不同的间隔运行多次,具体取决于打开的聊天次数。开始聊天很好
我的主要问题是如何停止上述间隔。我不想停止所有的时间间隔,只想停止与特定聊天相关的时间间隔。我试过这个
clearInterval("update_chat("+chat_id+")");
但它什么也没做
我试过了
var聊天时间间隔=[]
chat_interval[chat_id]=setInterval(“更新_chat”(“+chat_id+”),4000)代码>
clearInterval(聊天间隔[end\u id])代码>
它没有停止间隔clearInterval
()将间隔ID作为参数,以了解要清除的间隔setInterval
()在调用时返回一个interval ID,因此您将其存储在var中,并在希望清除该ID时将其传递给clearInterval
//start the interval, store its ID
var interval_id = setInterval( function () { /* do something*/ }, 1000);
//clear the interval
clearInterval(interval_id);
请注意,setTimeout
()和cleartimout
()的工作方式相同
还要注意的是,虽然setInterval
可以使用字符串参数作为要运行的函数,但它也可以使用实际函数(这是非常首选的)。因此,您的代码可以更好地编写为:
var update_chat_interval = setInterval(function () {
update_chat(chat_id);
}, 4000);
// to clear it later:
clearInterval(update_chat_interval);
clearInterval
()将区间ID作为参数,以了解要清除的区间setInterval
()在调用时返回一个interval ID,因此您将其存储在var中,并在希望清除该ID时将其传递给clearInterval
//start the interval, store its ID
var interval_id = setInterval( function () { /* do something*/ }, 1000);
//clear the interval
clearInterval(interval_id);
请注意,setTimeout
()和cleartimout
()的工作方式相同
还要注意的是,虽然setInterval
可以使用字符串参数作为要运行的函数,但它也可以使用实际函数(这是非常首选的)。因此,您的代码可以更好地编写为:
var update_chat_interval = setInterval(function () {
update_chat(chat_id);
}, 4000);
// to clear it later:
clearInterval(update_chat_interval);
不要将字符串传递到setInterval
@德里克朕會功夫 为什么不呢?我必须给那个函数传递一个参数。否则我如何才能将参数获取到函数中?因为传递字符串与使用eval
相同。传递参数的正确(安全)方法是在其周围封装一个匿名函数。不要将字符串传递到setInterval
@德里克朕會功夫 为什么不呢?我必须给那个函数传递一个参数。否则我如何才能将参数获取到函数中?因为传递字符串与使用eval
相同。传递参数的正确(安全)方法是在其周围包装一个匿名函数。@Gilberg在更新的代码中,您将ID设置为chat\u interval[chat\u ID]
,但将chat\u interval[end\u ID]
返回到clearInterval
。为清楚起见,您使用了chat_id,然后是end_id。此外,在您对问题的评论中,您询问了如何避免将字符串传递给setTimeout
和setInterval
。我的答案的最后一部分告诉你了。@Gilberg在更新的代码中,你将ID设置为chat\u interval[chat\u ID]
,但你将chat\u interval[end\u ID]
返回到clearInterval
。为清楚起见,您使用了chat_id,然后是end_id。此外,在您对问题的评论中,您询问了如何避免将字符串传递给setTimeout
和setInterval
。我回答的最后一部分告诉你怎么做。