enter ничего не должен делать
<form>
<input type="text">
<button type="button"><i class="fas fa-search"></i></button>
</form>
$("form").on('click','button', function(e) {
$("input").toggle();
}).submit(function(e){
e.preventDefault();
});
$("form").on('click','button', function(e) {
$("input").toggle();
$('button').attr('type', 'button');
}).submit(function(e){
e.preventDefault();
});
как это делают нормальные люди
var isMobile = true;
$("form").on('blur','input', function(e) {
if(isMobile && $(this).val() == ''){
$(this).hide();
$('<div>').appendTo('body').text('hide empty input')
}
}).submit(function(e){
e.preventDefault();
var $input = $('input');
if(isMobile){
if($input.is(':hidden')){
$input.show().focus();
return false;
}else{
$input.hide();
}
}
$input.blur(); //защита от множественной отправки
// полезная работа
$('<div>').appendTo('body').text('search: '+$input.val());
$input.val(''); // можно попробовать не очищать для широкой формы
});
<form>
<input type="text">
<button type="submit"><i class="fas fa-search"></i></button>
</form>
input, button {
border: 1px solid #000;
}
input {
display: none;
height: 46px;
vertical-align: top;
padding-left: 10px;
font-size: 20px;
}
button {
width: 50px;
height: 50px;
border: 1px solid #000;
background: transparent;
font-size: 20px;
cursor: pointer;
}
Получается при нажатии enter на пустом инпуте отправка все равно происходит, тут наверно нужна доп. проверка на пустоту инпута?
// полезная работа
if($input.val() == ''){return false}; <<<<<===
$('<div>').appendTo('body').text('search: '+$input.val());
Если кнопка спозиционирована абсолютно, то ваш вариант не работает, тогда как в данной ситуации поступить ?
window.location.reload
Не хватает крестика для очистки инпута одним кликом.
Есть у вас форма поиска на сайте. Заставьте ее работать нормально. Если это кнопка, значит она отправляет запрос, перегружая страницу. У вас так работает обычная версия?
А у вас одна кнопка кучу ролей играет. Да поставьте их две и скрывайте лишнюю!
Добавляю в код "в мобильной версии при показе инпута кнопке делаю type=button"
Запустить поиск можно либо enter в инпуте, либо на кнопку поиска нажать (если она будет доступна)
Кнопка-крестик привязана к инпуту. При клике на ней очищает инпут и прячет его (лучше, если пошлет ему событие blur, чтобы активизировать уже существующий механизм)
$("input").keydown(function(event){
if (event.keyCode === 13) {
return false;
}
}