2015-01-09 4 views
0

У меня есть форма, которая использует onblur для большинства полей ввода, например, следующим образом:Исключить кнопки формы из «ONBLUR» событие, JavaScript

<form> 
<input name="..." id="..." onblur="myFunction(name)" /> 
<button id="..." onclick="submit()">Submit</button> 
</form> 

Форма проверяет определенные поля (т.е. имя пользователя, адрес электронной почты) в режиме реального времени через события onblur, но такая же проверка происходит, когда пользователь нажимает кнопку отправки.

В настоящее время, когда пользователь нажимает кнопку отправки, сначала запускается событие onblur, а затем запускается событие onclick от кнопки - таким образом, выполняется проверка дважды и теряется пара дополнительных секунд.

Есть ли способ переопределить метод onblur, чтобы исключить размытие, которое происходит, когда пользователь нажимает кнопку отправки?

Я думал простой if(/*button is clicked*/){} в пределах myFunction(), но я не знал бы, как проверить на кнопку нажмите. И, похоже, исходя из текущей производительности, кнопка щелчка даже не регистрируется до тех пор, пока не размывается.

Заранее спасибо.

+0

* "тратить пару лишних секунд" * - Что вы делаете в 'MYFUNCTION()', который измеряется в * секундах *? – nnnnnn

+0

Ajax call do database для проверки доступности имени пользователя. Может быть, не совсем пара секунд, но достаточно времени, чтобы это меня беспокоило. По мере того, как происходит проверка, появляется пин-колесо. При нажатии кнопки отправки появляется тот же самый штифт. Таким образом, пользователь видит: pinwheel -> подтверждение ввода (очень кратко) -> pinwheel -> повторное подтверждение ввода. Это просто выглядит уродливо и глючно. – Birrel

ответ

1

Вы можете сделать это:

HTML

<form> 
    <input type="text" name="name" id="id" /> 
    <input type="submit" /> 
</form> 

JQuery

$(document).on('blur', 'input:not([type="submit"])', function(e) { 
    var key = e.keyCode; // the key pressed 
    var elem = e.target; // the element blurred 
    myFunction(name); 
}); 

$(document).on('click', 'input[type="submit"]', function() { 
    submit(); 
}); 
+0

Вы неправильно поняли проблему. Исходный код не имеет обработчика размытия на кнопке отправки. Вопрос заключается в том, как предотвратить работу обработчиков размытия на * других * входах, если они имели фокус перед нажатием кнопки отправки. – nnnnnn

+0

Это может сработать, но, возможно, глупый вопрос: в первом методе, как я могу получить a) событие (в частности, ключевой код), чтобы вызвать размытие, а также имя поля, в котором произошло размытие? – Birrel

+1

проверить отредактированный ответ – kapantzak