Я использую событие focusout
и focusin
в полях ввода в моем приложении.Мой скрипт проверяет, есть ли в полях ввода ошибка проверки или нет, когда происходят события focusin
/ focuseout
;следовательно, под окном ввода отображаются соответствующие сообщения об ошибках, в которых указывается проблема при вводе пользователем.
У меня также есть кнопка отправки, и после слов, когда вся форма заполнена, я снова запускаю проверку для каждого вводакоробка для любых ошибок.
Итак, я приложил 3 события, 1. focusout 2. focusein events
3. <button> submit button (Click) events
.
Заметил, что там, когда событие focusout and click
запускается одновременно, click event
подавляется в этом случае ниже.
Обратите внимание, что все работает нормально, если печатаются только сообщения [для целей отладки],Но в тот момент, когда я выполняю некоторые манипуляции с DOM [изнутри focusout
метода], например добавление класса в div или вставку в span под полем ввода и т. Д. - Самое первое событие щелчка мыши остается незамеченным.
Когда это происходит
Когда ошибка ввода исправлена и немедленно, без нажатия в другом месте на странице, нажимается кнопка отправки.
Это только когданажатие кнопки дважды обнаруживает событие щелчка.
Ниже приведен пример фрагмента Jquery с такой же проблемой.
Действия для повторного создания проблемы:
- Нажмите на поле ввода.
- Нажмите кнопку вкладки (вы увидите сообщение «Ввод пуст» под полем ввода).
Теперь введите в это значениеполе ввода.
Нажмите кнопку отправки напрямую (убедитесь, что вы больше нигде не нажимаете).событие Click кнопки отправки не запускается.Первый щелчок просто игнорируется, затем он срабатывает при последующих щелчках.
$("#submit").click(function(event){
if(null != $("#watch").val() && $("#watch").val() != ""){
$(".error-msg").text("inside submit: good to submit");
}else{
$(".error-msg").text("inside submit: submit done");
}
});
$("#watch").focusout(function(event){
if(null != $("#watch").val() && $("#watch").val() != ""){
$(".error-msg").html("inside focusout only");
$('.test1').css('display','none');
$('.test1').addClass('testing');
}else{
$(".error-msg").html("input is blank");
$('.test2').addClass('testing');
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="test1">test1</div>
<input id="watch" type="text" placeholder="My input"/>
<div class="error-msg"></div>
<button id="submit" type="text">submit</button>