Перекрывающиеся события из разных элементов дважды запускают одну и ту же функцию в JQuery

У меня есть мертвая простая форма поиска:

<div>
  <input id="searchArea" type="text" value="" placeholder="Enter your search terms">
  <button id="searchButton">Search</button>
</div>

и фрагмент javascript, управляющий им:

function searchFunction() {
  console.log("This is a POST request being send to the server");
}

$("#searchButton").on("click", function(e) {
  e.preventDefault();
  searchFunction();  
})

$("#searchArea").on("change", function(e) {  
  e.preventDefault();
  searchFunction();
});

Проблема в том, что щелчок и изменение перекрывают функциональность, и поэтому я получаю следующее:

Когда я набираю что-то в текстовом поле, а затем нажимаю в другом месте на экране, searchFunction срабатывает правильно, но если "в другом месте" становится кнопкой поиска, то searchFunction двойные огни.

Мой вопрос таков: однажды внутри click обработчик, есть ли способ отменить change обработчик от стрельбы, который в противном случае вызвал бы searchFunction удвоить огонь?

Имейте в виду, что searchArea а также searchButton не имеют отношения родитель-ребенок, что означает обычные методы, такие как preventDefault а также stopPropagation не сработает

Вы можете увидеть это в действии в этой скрипке.

заранее спасибо

0 ответов

Другие вопросы по тегам