Я пытаюсь создать объект javascript, который отслеживает состояние формы. Мой первый удар был длинным «процедурным» решением jquery, где я прокручивал каждое поле формы, проверяю, установлено ли оно «Все», удалите класс active
или добавьте его, если его там нет. Это короткая версия:связать объект javascript с DOM
function activeClass() {
if(this.val() === 'All') {
$(this).parent().removeClass('active');
}
$('#content-filter select', context).foreach(function() {
if(this.val() !== 'All') {
this.addClass('active');
}
});
}
Мы делаем целую кучу других вещей, так что код становится долго. Следующим направлением, которое я хочу предпринять, является создание отдельного объекта, который отслеживает состояние формы и использует прослушиватели событий для обновления состояния формы по мере ее изменения.
formState = {
featured: false,
all: false,
category: 'All',
topics: 'All',
audience: 'All',
date: {value: '', min: '', max: '', filter_op: '='},
};
Часть, с которой я борюсь, связана с тем, как связать объект с DOM. Мой первый наклон, чтобы сделать что-то вроде этого:
$('select').on('change', function() {
formState[$(this).attr('id')] = $(this).val();
});
Проблема здесь состоит в том, что id
из выбора должен соответствовать свойству. Кроме того, мне сказали, что способ сделать это - использовать метод getter и/или setter для изменения этих значений. У меня есть некоторое понимание того, что это значит, но где я смущен, так это то, как они привязаны к DOM.
Зачем использовать отдельный объект для отслеживания состояния, когда вы можете просто получить состояние из элемента DOM? – Barmar
Если вы хотите сохранить дополнительную информацию об элементе, вы можете использовать метод '.data()' jQuery для связывания произвольных данных с элементом DOM. – Barmar