start button not clickable after focus jquery - клик по кнопке не срабатывает событие - не работают события после использовая функции focus() - blur form validation

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

Ситуация:

после клика по кнопке запускается некая функция проверки поля формы (используется 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" (тут ваша функция)
          } 
});