Просто return false;
после фокусировки элемент разорвать петлю $.each()
. В настоящее время фокус будет установлен на ваш последний пустой элемент, поскольку цикл продолжается.
Мы можем разбить цикл $ .each() на конкретной итерации, возвращая функцию обратного вызова false. Возврат не-false - это то же самое, что и оператор continue в цикле for; он немедленно перейдет к следующей итерации.
Источник: https://api.jquery.com/jquery.each/
Редактировать, чтобы быть ясно:
$('input').each(function() {
if ($(this).val() == '') {
this.focus();
return false;
}
});
Edit, так что вам не придется читать все комментарии:
Комплексное решение должен был использовать event.preventDefault()
в соответствующем обработчике onSubmit
, а затем проверить входы для пустых значений в этом. Впоследствии необходима дальнейшая обработка (как в: подтверждение и, наконец, отправка его (серверному) приложению) входов.
$('#loginForm').on('submit',function (e) {
e.preventDefault();
// focus first empty input
$('#loginForm input').each(function() {
if ($(this).val() == '') {
this.focus();
return false;
}
});
// further input processing
});
Попробуйте 'вернуться ложным; 'после того, как вы установили фокус – NightOwlPrgmr
, он не работает. Я уже пробовал. Я использую оперу –