В частности речь идет о чекбоксе "согласие с политикой безопасности", но схема актуальна и для любого другого чекбокса или радиобаттона.
На первый взгляд задача простая, но решение оказалось нетривиальным.
Путь поиска решения:
- Указываем обазательное поле у варианта доставки в настройках MiniShop2
- Прописывам класс
input-parent
для обертки инпута - Если не помогло, тогда открываем
assets/components/minishop2/js/web/default.js
и ищем блок с указанием дефолтных классов, там должно быть что-то типаminiShop2.Order.inputParent =
- Прописываем указанный там класс для обертки инпута
- Радуемся, но не тут то было. Хоть тресни, но система не выводит ошибку.
- Идем снова в тот файлик JS, и ищем строку
var formData = $form.serializeArray();
- Добавляем после этой строчки код:
$form.find("input.required:checkbox").each(function(){ if(!this.checked){ formData[Object.keys(formData).length] = {"name":this.name,"value": ""} } });
- Радуемся, @#$^, по-настоящему.
Пояснение: Прикол в том, что функция.serializeArray()
Не видит неотмеченный чекбокс, и не посылает информацию о нем на сервер. Соответственно сервер не возвращает ответ типа "Эй, поле пустое!", наивный сервак сообще не знает что он должен проверять это поле. Предлагаемое решение создает элемент массива с пустым значением — чтобы сервак это увидел и поругался.
HTML и CSS для симпатичного чекбокса
C правилами обработки персональных данных ознакомлен
Комментарии (0)
Не писать ответ