2015-07-14 2 views
0

Я изменяю существующее существующее приложение. В этом приложении вверху страницы находится панель поиска. Мне нужно записать, когда пользователь нажимает «Enter» в строке поиска, чтобы я мог запустить некоторую логику.jQuery.on («keydown»), когда ключ «вводится» перехватывается (?) И не работает

Простой, похоже. Я могу просто использовать jQuery keydown или даже keypress событие для записи нажатия клавиши, а затем, если значение ключа соответствует для «Enter», я могу продолжить.

<form action="https://www.google.com" method="get" target="_blank"> 
    <input id="search-field"/> 
</form> 

<script> 
    $(document).on('keydown', "#search-field", function (e) { 
     if (e.which == 13) 
     { 
      //"some logic" 
     } 
    }); 
</script> 

Это захватывает все нажатия клавиши КРОМЕ "введите"! Когда я создаю alert(e.which); в своем JavaScript, значение каждой клавиши будет всплывать, но когда я попробую «ввести», он просто отправит форму и загрузит новую страницу без запуска предупреждения.

Мой вопрос: Не зная существующего кода относительно поиска коробки (у меня есть очень ограниченный доступ), есть ли способ, что я могу каким-то образом получить это событие keydown стрелять? Почему это может быть неудачно?

Примечание: я должен использовать jQuery.on() в этом формате для обработки события

ответ

0

Я не понял, как обойти другие события. Но я нашел то, что предотвращение мой ключ от признается:

В файле Site.js был некоторый JavaScript:

$('#SearchTerm').keydown(function (event) 
    { 
     return handleKey(event); 
    }); 

    $('#SearchTerm').keyup(function (event) 
    { 
     // Some stuff here... 
     return false; 
    } 

Этот файл был включен перед тем файл JavaScript я. Поскольку он был первым и имел свои собственные keydown/keyup событиях, он выполнял их и делал свой собственный e.preventDefault(), прежде чем keypress имел шанс добраться до моего собственного скрипта.

1

Вы должны предотвратить нормальное поведение формы. Используйте: e.preventDefault() в своей логике, чтобы предотвратить отправку формы. Кроме того, рассмотрите возможность использования события keyUp.

+0

e.preventDefault() в этом обработчике событий предотвратил все, кроме «Enter». Может быть, что-то обращается к нему перед моим обработчиком событий? – AlbatrossCafe

+1

Или даже после этого. Если представление формы происходит в другом событии, таком как «submit» или «keyUp», предотвращение «keyDown» не будет делать ничего. Вы можете остановить попытку остановить событие, чтобы пузыриться до элементов родителей, добавив результаты поиска e.stopPropagation(); – ThiagoPXP

+1

Возможно, попробуйте остановить распространение? Я не слишком уверен, но может быть, что keydown распространяется на

. –

 Смежные вопросы

  • Нет связанных вопросов^_^