при вводе событие происходит автоматически после возврата на страницу

#javascript #jquery #input #alert

Вопрос:

 <input type='text' class='binp'>

$('.binp').on('input', function(){
    alert('lorem');
});
 

поэтому я что-то набираю .binp и перехожу на другую страницу
, а затем возвращаюсь, используя кнопку браузера Go Back (история) .

и lorem появляется предупреждение
, и я должен нажать на его OK кнопку несколько раз, чтобы закрыть предупреждение

как этого избежать?
Мне нужно предупреждение только в том случае, если я наберу, удалю или вставлю что-то во ввод, а не после возвращения на страницу

Комментарии:

1. используйте 'change' событие не 'input'

Ответ №1:

Примерь размытие.

 $('.binp').on('keyup', function() {...});
 

Комментарии:

1. в данном случае Shift, Ctrl, Esc… также вызовет событие

2. Попробуйте использовать sessionStorage, чтобы проверить, возвращается ли он из истории внутри прослушивателя событий «вход».

Ответ №2:

Вы не показали весь код, но я предполагаю, что вы потеряли регистрацию на мероприятие. Просто поместите его в раздел «Готовый обработчик событий».

Упрек:

(1) ввод (2) нажмите ссылку (3) нажмите курсором где-нибудь в открывшейся ссылке, чтобы сфокусировать ее (4) Используйте Alt ⬅ , чтобы вернуться (или другой ярлык).

 // bad
$('.binp').on('input', function(){
    alert('lorem');
}); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="https://stackoverflow.com">link</a>
<input type='text' class='binp'> 

Решение:

 $( document ).ready(function() {
  // good
  $('.binp').on('input', function(){
    alert('lorem');
  });
}); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="https://stackoverflow.com">link</a>
<input type='text' class='binp'> 

Комментарии:

1. до тех пор, пока JavaScript находится в конце страницы, как и должно быть, и элемент выходит, нет необходимости его оборачивать.