Поскольку вы хотите указать время ожидания для каждого поля, у вас есть два очевидных варианта:
- Есть глобальный интервальный таймер, который довольно часто переключается и просматривает все ваши поля для поискаtimeout.
- Имеют независимые таймеры для каждого поля, которые имеют дело только с этим полем.
Я думаю, что в целом я предпочитаю (1) - (2), потому что мы имеем дело только сзатем с одним интервальным таймером, что упрощает ведение домашнего хозяйства.
Поскольку идентификаторы в документах должны быть уникальными, мы можем использовать значения идентификаторов вашего поля в качестве ключа в хэше (объекте) для хранения последних обновленных времен.Это своего рода ответ на предыдущий ответ, но работает на основе поля.Итак, вот как мы устанавливаем эти последние обновленные времена:
var lastUpdatedTimes = {};
function changeValue(data){
var fieldId= data.fieldId;
var value = Math.round(data.value);
$('span#'+fieldId).text(value);
lastUpdatedTimes[fieldId] = new Date().getTime();
}
Затем вы устанавливаете интервальный таймер для проверки каждого из них.
function checkFieldsForTimeout(){
var now = new Date.getTime();
// For each ID in lastUpdatedTimes, see if 'now minus
// last updated' is > 5000 and is so, set the field
// text to '--' and remove that entry from the last
// updated list with "delete lastUpdatedTimes[itemId]".
}
Если пружина поля тайм-аутак жизни «-» снова будет заменен каким-то реальным текстом.
Удаляя последнее обновленное время из «lastUpdatedTimes» всякий раз, когда мы помещаем «-» в поле, мы гарантируем, чтотаймер интервала не тратит время на обработку полей, которые уже истекли.