start button not clickable after focus jquery - клик по кнопке не срабатывает событие - не работают события после использовая функции focus() - blur form validation
Primary tabs
довольно странная ерунда - кнопка работает ровно через раз - то работает то нет. выясняем причину.
Ситуация:
после клика по кнопке запускается некая функция проверки поля формы (используется div) и, в случае неуспеха, фокус перещается на некоторый элемент формы, проблема в то, что при этом событие которое должно вызываться при нажатии на кнопку отрабатывает через раз (то работает то нет)
Возможное решение
если вы заметили что странности происходят при использовании focus - например:
$('#omeblockid').focus();
, то, возможно, причина в том (как в моём случае), что помимо события клика на кнопку генерируется (и отслеживается) событие потери фокуса элементом формы - добавьте вашу проверку в это событие. -
то есть запускайте вашу проверку не только по клику на кнопку, но при потери фокуса этим элементом (в случае если это событие раньше уже используется в вашем скрипте)
Причина
Причина, якобы состоящая в том, что события вызываются асинхронно (клика на кнопку и потери фокуса) не убедительна - так проверка показывает, что один раз событие клика вообще почему-то не вызывается (через раз - один раз вызываются и blur и click, а второй раз только click, п). А потому ничего не ясно пока что (в смысле причины).
Ещё одна проблема
Связано с предыдущим - но здесь задача стоит в том, чтобы отправить форму - уже не достаточно просто запустить проверку и по click (кнопки) и по blur (одного из полей формы) - отправку формы неизбежно надо производить по клику, а потом можно просто самостоятельно определить когда вызывать обработчик blur следующим образом:
$('#someblock').next() .on('focus', shopSTextFocus); //.on('blur', shopSTextBlur); // с этим вызовом проблемы - теряем событие click после перевого нажатия на кнопку $(document).on('click', function(e) { // поэтому самостоятельно назначим blur - определив "по чём" именно произошёл клик var target = $(e.target); if (target.closest($('#sad')).length == 0 // если не по блоку с id = sad && target.closest($('#sad-btn')).length == 0 // если не по блоку с id = sad-btn && target.closest($('#text').next()).length == 0) // если не по блоку, следующема за блоком с id = #text { someFuncForBlurBlur($('#text').next()); // вызываем обработку "blur" (тут ваша функция) } });
- vedro-compota's blog
- Log in to post comments
- 5831 reads