Как сделать кнопку кликабельной только при заполнении полей?

12
IL
На сайте с 20.04.2007
Offline
435
#11
silicoid:
ivan-lev, Textarea, select, input.сheckbox input.radio. input.file и т.д. забыли

Там специально полужирным подсветил.. типов различных - не так уж много. А если перебрать все, что используются "в данной конкретной форме" - и того меньше.

silicoid:
проверки на заполненность для select и textarea, разные. (это как пример)

Ужасть какая нетривиальная.. ))

ArbNet:
в inputы required поставь

А вообще, пожалуй, тут ArbNet вполне годный вариант предлагает - required современными браузерами поддерживается, только вместо href-а сделать реальный сабмит формы (или location.href в onsubmit перенести)

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
S
На сайте с 13.10.2014
Offline
171
#12

ivan-lev, я наверное не так выразился. проверить значение на пустоту не так и сложно, но я просто ширше думаю (или ширей?) эту же штуку можно вообще на валидацию полей прикрутить. Например сравнивать поля "пароль" и "пароль еще раз" -- как пример.

надо будет как-нибудь заморочиться написать такой велосипедище.

Если задач будет сыпаться мало, то напишу

T7
На сайте с 19.09.2018
Offline
63
#13
silicoid:
надо будет как-нибудь заморочиться написать такой велосипедище.

Считаю такой велосипед обязательным для сайта. Более того, он может быть весьма важным компонентом. Существенно облегчающим обмен клиент-сервер для разработчика. В 300-400 строк вполне умещается. Если с базовыми обработчиками + классы модал, ноти и т.д чуть больше 1000.

Ну типа, хтмл

<input
data-url="/api/ui_site/new_section/"
type="text" name="section"
data-parent="089ddc76" data-min="1"
data-max="3" value="" class="frm">

при изменении, проверит содержание поля или полей формы, и если ок, отправит запрос на data-url, сервер все проверит и чем то ответит. Документ в ответ откроет модальное окно и покажет уведомление. Как на скрине:

В данном случае, запрос обработан так:

private function new_section()
{
$new = _arr($_POST, 'val');
$parent = ansGet($_POST, 'data.parent');
Core::out_('post', $_POST);
Core::out_('noty', ['Новый раздел ' . $new , 'Create new section in sectionId ' . $parent, null, 'info']);
Core::out_('modal', ['New section', 'Request : ' . Core::_cnf('headers.Aapp-Csrf') . prnt($_POST), 'Footer', null, 'SE_modalId' ]);
}

Но вариантов обработки json ответа может быть 100500:

Ну типа, включение в ответ

Core::out_('js', 'alert("Как сделать кнопку кликабельной только при заполнении полей?")');

---------------

Для формы, в моем случае, как то так:

checkfrm:function(el){
const id = elmId(el), btnid='btn_'+id,
errors = el.querySelectorAll('input.error,textarea.error,select.error');;
if(errors.length) $$(btnid).disabled = true;
else $$(btnid).disabled = false;
}

Рецепт универсальный - проверить все поля, если неОк, то класс - error.

IL
На сайте с 20.04.2007
Offline
435
#14
silicoid:
я просто ширше думаю (или ширей?) эту же штуку можно вообще на валидацию полей прикрутить.

И это тоже уже придумано до нас..

Различного рода варианты валидации (в том числе и "required", "compare", "numeric") и тд имеются во всех (подавляющем большинстве *) современных php-фреймворков в том или ином виде.. В том числе и с возможностью валидации на клиенте.

Можно ознакомиться с https://jqueryvalidation.org/ (например) - возможно, что-то для велосипеда удастся почерпнуть.. )

S
На сайте с 13.10.2014
Offline
171
#15

ivan-lev, в codeigniter (который я для себя использую) такая валидация, разумеется, есть. Но она серверная. Тут же другая тема. Сделать полный клон оной, только на клиенте, дабы лишний раз тудой-сюдой данные не гонять.

S
На сайте с 30.09.2016
Offline
469
#16
silicoid:
Сделать полный клон оной, только на клиенте

Это лишнее. На клиенте надо отсеивать основной мусор, а на сервере уже фильтровать по полной программе.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
IL
На сайте с 20.04.2007
Offline
435
#17
silicoid:
Сделать полный клон оной, только на клиенте, дабы лишний раз тудой-сюдой данные не гонять.

В yii есть (и по умолчанию включена) валидация на клиенте

https://www.yiiframework.com/doc/guide/2.0/en/input-validation#client-side-validation

---------- Добавлено 13.02.2020 в 15:01 ----------

А для CI можно посмотреть реализации вроде такой, например:

https://github.com/bcit-ci/CodeIgniter/wiki/ClientServer-Validation

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий