更新由函数创建的对象中的 Javascript 变量 setInterval
Update Javascript variable setInterval in an object created by function with
我正在尝试在 javascript 中创建一个停止和启动计时器函数,以便在 jQuery 中使用以记录 $('input').
这是我目前拥有的:
function startTimer() {
_id = guid()
time = 0
timer_id = setInterval(function () {
time++;
}, 100);
timer = {
_id: _id,
time: time,
timer_id: timer_id,
}
return timer;
}
function stopTimer(timer) {
var stop = timer.time
clearInterval(timer.timer_id);
return stop;
}
// usage
fieldTimes = {}
// on focus of field
$("input").on('focus', function (e) {
element = e.target;
var timer = startTimer();
// on unfocus of field
$(element).blur(function () {
var time = stopTimer(timer);
var field = e.target.id
if (fieldTimes.hasOwnProperty(field)) {
fieldTimes[field] += time;
} else {
fieldTimes[field] = time;
}
})
});
Fiddle: http://jsfiddle.net/andrewblaney/Ltfvmaec/
问题是在 startTimer
创建的计时器对象上没有更新时间
你只是在增加定时器变量而不是时间object.Just把你的改成下面的
timer_id = setInterval(function () {
timer.time = time++;
}, 100);
当你说:
timer = {
_id: _id,
time: time,
timer_id: timer_id,
}
正在评估右侧的所有值。因此,timer.time
被设置为 time
在那个时间点的整数值。它 未 设置为对 time
变量的引用。
一个修复方法是简单地在区间中引用 timer.time
:
timer_id = setInterval(function () {
timer.time++;
}, 100);
编辑:
此外,您需要取消绑定您附加的 .blur
事件:
$(element).on("blur.timer", function () {
// ... code here ...
$(element).off("blur.timer");
})
我正在尝试在 javascript 中创建一个停止和启动计时器函数,以便在 jQuery 中使用以记录 $('input').
这是我目前拥有的:
function startTimer() {
_id = guid()
time = 0
timer_id = setInterval(function () {
time++;
}, 100);
timer = {
_id: _id,
time: time,
timer_id: timer_id,
}
return timer;
}
function stopTimer(timer) {
var stop = timer.time
clearInterval(timer.timer_id);
return stop;
}
// usage
fieldTimes = {}
// on focus of field
$("input").on('focus', function (e) {
element = e.target;
var timer = startTimer();
// on unfocus of field
$(element).blur(function () {
var time = stopTimer(timer);
var field = e.target.id
if (fieldTimes.hasOwnProperty(field)) {
fieldTimes[field] += time;
} else {
fieldTimes[field] = time;
}
})
});
Fiddle: http://jsfiddle.net/andrewblaney/Ltfvmaec/
问题是在 startTimer
创建的计时器对象上没有更新时间你只是在增加定时器变量而不是时间object.Just把你的改成下面的
timer_id = setInterval(function () {
timer.time = time++;
}, 100);
当你说:
timer = {
_id: _id,
time: time,
timer_id: timer_id,
}
正在评估右侧的所有值。因此,timer.time
被设置为 time
在那个时间点的整数值。它 未 设置为对 time
变量的引用。
一个修复方法是简单地在区间中引用 timer.time
:
timer_id = setInterval(function () {
timer.time++;
}, 100);
编辑:
此外,您需要取消绑定您附加的 .blur
事件:
$(element).on("blur.timer", function () {
// ... code here ...
$(element).off("blur.timer");
})