Посторонним В., Вы не поняли. Никакого трюка не надо.
Сначала происходит HTML5 валидация, потом сабмит формы.
Если вы отслеживаете событие submit на форме, то у вас HTML5 валидация сначала отработает. Если валидация не прошла, сабмита не будет.
Если вы ловите клик на кнопке, то к отправке формы это отношения не имеет, потому что вы глушите это событие. а раз нет отправки, то нет и валидации. Кроме того клик не сработает при отправке формы клавишей Энтер.
а если какой-то класс добавляется скриптом, да еще его имя генерируется им же?
let b = 'cls';
.classList.add(b+'_mod');
В разметке нигде нет класса .cls_mod, в скриптах его имя тоже не упоминается. Любой автоинструмент посчитает этот класс неиспользуемым и удалит из таблицы стилей. А он нужен. Будет весело, обещаю =)
Возможно, вам понадобятся также классы .visible-* и .hidden-*
Удалите вручную из того файлика, который вы скачали через кастомизатор всё, кроме них и пользуйтесь сеткой.
Сохраните себе отредактированный файлик на будущее.
netrox, значит вам нужно каким-то образом убрать отрицательные марджины у row/ а если их убрать, то нужно будет убрать левый паддинг у первого столбика и правый - у последнего.
или обернуть row в overflow блок.
ну включите уже фантазию, наконец =))
.row не должен просто так висеть на странице. Он должен быть например внутри .container у которого есть внутренние паддинги, которые компенсируют отрицательные марджины .row, которые и создают полосу прокрутки.
Вы полистайте страницу с документацией по сетке бутстрапа. Лишним для вас точно не будет. =)
Ну и в код заглядывайте. Сразу поймёте как работает та сетка.