Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как задизаблить (сделать неактивной) submit (https://javascript.ru/forum/misc/3130-kak-zadizablit-sdelat-neaktivnojj-submit.html)

skif 20.03.2009 15:55

как задизаблить (сделать неактивной) submit
 
как задизаблить (сделать неактивной) submit пока не заполнены поля формы?

Gvozd 20.03.2009 16:08

<input type="submit" disabled="disabled" value="йцукенГ" />

elem.disabled=true
elem.disabled=false

hogart 20.03.2009 19:15

Gvozd, топикстартер, наверное, хочет узнать, как узнать, что поля формы не заполнены:)

skif, так вот — никак. Единственный рабочий способ — по setInterval проверять, все ли заполнено, и задизейбливать/раздизейбливать кнопку.
А еще лучше — просто проверять все-таки по сабмиту.

Gvozd 20.03.2009 19:25

hogart,
да.наврено вы правы в нуждах топик-стартера.а вот по поводу реализации я пооптимистичней сомтрю
skif,
навешиваете на все поля формы(на onchange например.возможны вариации) специальную функцию-чекер.
каждый раз эта функция будет проверять заполненость всех полей и в случае необходимости менять состояние сабмита.как результатпроверок меньше чем по интервалу

hogart 20.03.2009 19:33

Gvozd, хз. По интервалу чекер будет выполняться как бы в отдельном треде. По onchange — в основном. То есть если форма большая и/или со сложными условиями — будут тормоза.

Мы боролись с этим на my.ya.ru, когда я там работал, в формах добавления постов. В итоге оторвали этот дизейблинг к чертям.

Gvozd 20.03.2009 19:43

Тогда вижу как вариант на onchange вешать и снимать settimeout

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

hogart 20.03.2009 20:35

Gvozd, интуиция подсказывает, что скорость таки будет не ахти. Впрочем, действительно, надо смотреть.
Все-таки я лично делал бы проверку по сабмиту формы. Да, не так красиво, зато надежно.

Андрей Параничев 20.03.2009 21:10

Gvozd,
Я так реализовал не раз, никаких тормозов.

Kolyaj 21.03.2009 01:20

Цитата:

Сообщение от Gvozd
навешиваете на все поля формы(на onchange например.возможны вариации) специальную функцию-чекер.

И в результате мы не сможем нажать на кнопку, пока не выйдем из поля, т.к. только тогда сработает change.

Цитата:

Сообщение от hogart
По интервалу чекер будет выполняться как бы в отдельном треде.

Нет в JS отдельных тредов.

Дизаблинг кнопки сабмита вообще зло, т.к. непонятно, почему она неактивна. В отличие от сообщения при попытке сабмита с последующим фокусом в проблемное поле.

И проверка полей по таймауту не тормозит, главное каждому элементу свой таймаут не делать.

skif 23.03.2009 02:14

Всем огромное спасибо за столь подробные подсказки...
Сам я всё это понимаю, и с удовольствием навешал бы на эту форму простой чекинг, но вот заказчик уперся Хочу, чтобы кнопка дизейблилась и всё тут...


Часовой пояс GMT +3, время: 16:15.