Видимо чего-то я не знаю, либо ...
Родительскому блоку (объявлен в глобальной переменной) делегируется обработка полей типа number следующих событий - "input keyup change", а также "focusin" и "focusout".
Поле имеет дата-атрибуты - количество товара в корзине 0/N, и минимальное количество для заказа - всегда не менее 1. Рядом с полем кнопка добавления в корзину - button, имеющая значением ID товара. При загрузке страницы и выводе списка, если значение поля устанавливается равным значению в корзине. Если оно равно 0, то button disabled = true, иначе disabled = false и кнопке добавляется класс "add". Обработчик первых трех событий обрабатывает ручной ввод и определяет доступность кнопки по условию: если кнопка имеет класс "add" || значение поля > 0 && значение поля >= минимального значения для заказа, то disabled равна false, иначе true. Почему условие проверяет и по классу - дело в том, что при добавлении в корзину при изменении количества, если оно будет 0, то кнопка становится недоступной. А для товаров уже имеющихся в корзине, можно установить значение равной 0, чтобы иметь возможность удалить товар из корзины. После этой операции по триггеру события "focusin" управление передается обработчику этого события. Этот обработчик выводит у поля таблицу расчета: показывается информация для поля - если товара не в корзине, то при наборе текст "Для корзины". Если товар уже в корзине, то отображается и второй текст отображающий его состояние в корзине, а при наборе первый текст имеет сообщение "Изменить в корзине". Два текста или один, и что будет выводить первый текст также определяется по условию: если дата-атрибут "в корзине" не 0 && значение поля != дата-атрибуту "в корзине", это это изменение в корзине, иначе набор для корзины. Все работает как и положено, если страница загружена, и с товарами в корзине, и с не добавленными. По асинхронным запросам добавления товара в корзину (изменения в корзине) сервер отвечает, и его ответ обрабатывается - по возвращенному ID, находится кнопка источник запроса и ее сосед - поле ввода, которым производится установка следующих параметров (все из данных ответа): 1) в дата-атрибут "в корзине" и значению поля возвращенное значение добавленного/измененного - выполняется. 2) в зависимости от возвращенного значения добавленного/измененного убирается или добавляется класс "add" кнопке - выполняется. 3) 2) в зависимости от возвращенного значения добавленного/измененного устанавливается disabled true/false не выполняется. И как я только не пытался установить этот disabled, бесполезно. А так как не выполняется 3), то соответственно можно выполнять запросы неконтролируемые. И не смотря на то, что в дата-атрибут "в корзине" производится запись изменений, значение поля также изменяется, тексты в таблице расчетов отображаются не те. То есть перестают работать условия. Обработчики работают, делегирование, а что не так после смены значений у элементов? PS. Неужто при смене значений они не будут равны тем, которые были у элемента на момент установки обработчика и надо переписать DOM элементы? |
Если речь о методе .data(), то он снимает данные с дата-атрибута только первый раз, здесь написано.
|
Да, темный я, это уже другие DOM. :)
|
Цитата:
Он не первый раз снимает, а берет из атрибута всегда до тех пор, пока не будет установлены объекту данные методом .data(), тогда он будет оперировать ими. |
Если другие, то прав наверное.
|
Цитата:
В общем клонировал, перезаписал ими, и работает. |
Часовой пояс GMT +3, время: 09:49. |