почему jquery и javascript размывают событие бесконечный цикл - PullRequest
0 голосов
/ 05 июня 2018

$("div").on("blur kepress", 'input', function(evt){
    console.log(evt.type);
    if ( $(this).val().length > 8 ) {
        alert("loop");
        $(this).focus();
    } else {
        console.log(2);
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
	<div class="parent">
    	<input type="text">
	</div>
</body>

Если длина больше 8 попадает в бесконечный цикл, я хочу найти решение Пожалуйста ...

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Это потому, что вы запускаете «Размытие», когда нажимаете на окно оповещения, затем оно перефокусируется, затем повторно оповещает и т. Д. И т. Д.

0 голосов
/ 05 июня 2018

Проблема в том, что вызов alert не фокусирует элемент, - это окно предупреждения, которое является новым фокусом.Таким образом, событие blur снова запускается на input, что приводит к повторному запуску всей функции прослушивателя - она ​​продолжает срабатывать сама.

alert в любом случае очень неприемлемо для пользователя.Исправьте это, удалив alert:

$("div").on("blur kepress", 'input', function(evt){
    console.log(evt.type);
    if ( $(this).val().length > 8 ) {
        $(this).focus();
    } else {
        console.log(2);
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
	<div class="parent">
    	<input type="text">
	</div>
</body>
...