Совмещение обработчиков
Добрый день. Есть два обработчика
$('.search-button').on('click', function () {
searchClients();
});
$('.search-input-string input').on('keyup', function(event) {
//кусочек кода
searchClients();
});
Один на нажатие кнопки, второй ловит нажатие enter в инпуте. Вопрос - прямо так и оставить в целом адекватно либо можно их как то обьединить ввиду одинакового содержания? |
Объединить что?
Кстати первый раз вы можете просто написать имя функции. У вас же пустая обертка. То есть так
$('.search-button').on('click', searchClients);
|
nani_t,
Если у вас инпут и кнопка в форме находятся, то можно так:
<form action="" id="search-form">
<div class="search-input-string">
<input type="text" placeholder="Search">
</div>
<input class="search-button" type="submit" value="Search">
</form>
<script>
function searchClients(){
console.log('Searching...');
}
$('#search-form').on('submit', function(event) {
event.preventDefault();
searchClients();
});
</script>
|
Куда keyup дели?
|
Цитата:
|
кнопка с инпутом не в одной форме.
Просто у меня есть некий код (в виде функции searchClients) который должен выполняться при наступлении разных событий. Пака-что это нажатие кнопки и ентер в инпуте, но будут и другие события которые будут опять вызывать эту же функцию (просто передавать будут свои параметры) Поэтому я решил уточнить этот момент - тупа перечислять элементы и указывать им обработчик события (как в моем самом первом посте) это в целом нормально? либо есть какой-то паттерн, прием, методология которая позволяет это сделать более красиво. |
можешь вот так написать
$('.search-button').on('click', searchClients);
$('.search-input-string input').addEventListener('keyup', searchClients);
$('.search-input-string input').addEventListener('keyup', function(e){кусочек кода});
если тебя повторяемость так напрягла |
Цитата:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
function myFunc(e) {
alert(e.target.id)
}
$(function() {
$('body').on('keyup click keypress', '#one,#two,#three', myFunc)
});
</script>
</head>
<body>
<input id="one" />
<input id="two" />
<input id="three" />
</body>
</html>
|
laimas, решение видимо самое очевидное :) Можно сказать почти то что мне нужно. Единственное есть подозрение что при добавлении в наборы событий и элементов принципиально разных событий (например click и blur) и элементов, то логика поломается.
|
То есть, если вызывать функцию по событию обрабатываемую отдельно установленными обработчиками, то логика не поломается?
Что у меня написано, что вы будете вызывать функцию из разных обработчиков, все едино - пока ваша функция каким либо образом не будет знать источника события, толку от этой функции не будет. Поэтому в примере и показано - определили id источника. Кроме этого, можно определять в одном обработчике и тип события, и принимать соответствующее действие. В противном случае бессмыслица получается. В обработчик можно передавать и event-map, где свойствами будут события, а их значения соответствующие обработчики. Возможно это как раз и было бы лучшее в данном случае. |
| Часовой пояс GMT +3, время: 16:15. |