Предотвратить фокус на нажатие кнопки в простом JavaScript - PullRequest
4 голосов
/ 10 октября 2011

Я сталкиваюсь с более или менее той же проблемой, описанной здесь , (то есть у меня есть вход отправки, который нажимается программно, когда он получает фокус после вкладки, но обработчик фокусировки также вызывается, когда пользовательнажимает на кнопку, вызывая двойную передачу).Решение, предложенное в связанном посте, работает, но мне нужно решение, которое не требует jQuery.У кого-нибудь есть мысли по этому поводу?Обратите внимание, что мне нужно, чтобы поведение кнопки оставалось таким же, поскольку она связана с событием на стороне сервера asp .net.Спасибо!

Ответы [ 2 ]

2 голосов
/ 13 февраля 2012

В итоге я получил обработчик keyUp и keyDown, в котором я установил / снял переменную isKeyPressed. Насколько я понимаю, последовательность событий, происходящих при табуляции, следующая:

  • KeyDown
  • фокус получен
  • KeyUp

Таким образом, в обработчике события фокуса я проверяю, был ли фокус получен с помощью табуляции (т.е. если isKeyPressed установлен в true), и отправляю форму туда. В противном случае, если фокус был получен после щелчка (), isKeyPressed не будет установлен в значение true, и я не буду запускать отправку формы программно.

2 голосов
/ 13 февраля 2012

Вы хотите запретить отправку формы, поэтому добавьте прослушиватель событий, а затем укажите, как JavaScript должен обрабатывать отправку формы. Также +1 к вашему вопросу за вопрос, как грамотно кодировать это, не завися от каких-либо фреймворков! : -)

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

if (window.addEventListener)
{
 forms[i].addEventListener('submit',function(e) {e.preventDefault(); eval(id_forms[e.target.id]+'();');},false);
}
else if (window.attachEvent)
{
 forms[i].attachEvent('onsubmit',function(e,f) {e.returnValue=false; eval(id_forms[e.srcElement.id]+'();');});
}
...