Javascript 使用setInterval时保留上下文
我有一个用户控件,其中有一个计时器。在用户控件本身中使用javascript每5秒更新一次计时器。在运行时,会创建一些用户控件实例。我把它们放在一个更新面板中。当只有一个用户控件实例时,计时器工作正常。但当存在多个实例时,每5秒只更新最后一个实例。以前的实例不会得到更新 以下是我的javascript:Javascript 使用setInterval时保留上下文,javascript,user-controls,setinterval,Javascript,User Controls,Setinterval,我有一个用户控件,其中有一个计时器。在用户控件本身中使用javascript每5秒更新一次计时器。在运行时,会创建一些用户控件实例。我把它们放在一个更新面板中。当只有一个用户控件实例时,计时器工作正常。但当存在多个实例时,每5秒只更新最后一个实例。以前的实例不会得到更新 以下是我的javascript: var start = new Date('<%=session.startTime%>'); var stat = '<%=session.status%>' Upd
var start = new Date('<%=session.startTime%>');
var stat = '<%=session.status%>'
UpdateValues();
AutoUpdateValues();
function AutoUpdateValues(){
setInterval(function () {
UpdateValues();
}, 5000);
}
function UpdateValues() {
//update time elapsed
var totalSec = Math.ceil((new Date() - start) / 1000); //time elapsed in seconds
var hr = Math.floor(totalSec/3600);
var min = Math.floor((totalSec % 3600)/60);
var sec = totalSec % 60;
if (stat == 2) {
$('#<%=lblTimeElapsed.ClientID%>').text(hr + "h " + min + "m " + sec + "s" );
}
}
我读过关于将上下文传递给方法的用法,但我不知道如何在代码中实现它。
需要帮忙吗?谢谢每个dom只能有一个ID,但是您可以通过使用$'[ID=]'进行欺骗。您为什么不能使用类而不是ID?正如@dandavis所说,每个DOM只能有一个ID,但一个类可以有多个实例。$。文本将应用于所有实例。@concrete\d用户控件的每个实例都有自己的值。如果我使用类,那么来自用户控件的一个实例的脚本将影响用户控件的其他实例中的控件,因为它们将具有相同的类,并且在同一页面中同时实例化。这不就是要发生的吗?@dandavis嗨。谢谢你的建议。试过了,但得到了同样的结果。只更新最后一个实例。您的意思是单击一个用户控件会影响另一个用户控件吗?可以在多个DOM元素上设置一个类,并且只让单击事件影响被单击的实际元素,即在jQuery中使用“this”值。本页上有一个示例: