2016-08-22 3 views
0

В моем приложении, я прислушивался к keyups на вводе текста, как это:Несколько главенствующее «KeyUp» событие

$('input[type="text"]').keyup(function(){ 

Это прекрасно работает, но я также хочу, чтобы слушать для пользователя нажатия UP или ВНИЗ в любом месте в остальной части документа - так что я попытался добавить следующее (желавшему JQuery будет использовать один вход внутри текстового поля и глобальный один за что-нибудь еще):

$(document).keyup(function(e) { 

Он не сделал этого, и теперь выбирает глобальную клавиатуру для всего. Есть ли способ заставить JQuery делать то, что мне нужно здесь? Я чувствую, что в каждом случае нужно выбирать «наиболее специфический» ключ, но, похоже, это не так ...

+0

Как вы определить, какие одна она использует ? Потому что он должен запускать оба, если вы не используете 'stopPropagation()' или 'preventDefault()' где-то. –

+0

Стандартное распространение событий происходит от большинства вложенных элементов в DOM до root, поэтому эти события должны работать или вы прекратили распространение события в обратном вызове. –

+0

Вы, ребята, правы, тестирование на JSFiddle вызывает оба, должно быть, я что-то делаю неправильно где-то, я не останавливаю распространение, хотя –

ответ

1

вы можете использовать этот способ для прослушивания пользователя при нажатии клавиши UP в любой из целых элементов документа с исключением для ввода [типа = «текста»]

<script> 
     $(document).keyup(function(e) { 
      if($(e.target).is('[type="text"]')){ 
       return; <!-- you can handle keyup of input type text in this block --> 
      } 
      else { 
       <!-- handle your keyup of ducument code here --> 
      } 
     }); 
</script> 
+0

Genius! Спасибо. Я до сих пор не знаю, почему мой локальный js не вызывает обе функции, но это отрицает необходимость в этом. Большое спасибо! –

+0

Добро пожаловать :) и всегда помните, что нет необходимости создавать сложный код –

1

Он должен работать с обоими обработчиками, начиная с одного для более конкретного элемента. Но если это не так, вы можете изменить второй обработчик, чтобы он не перекрывался.

$(document).on("keyup", ":not(:text)", function(e) { 
    ... 
}); 

:text является сокращенным селектором для input[type=text] и :not() исключает их в этой привязке.

+0

Вы правы, я попробовал это на JSFiddle, и он запускался как начиная с наиболее определенно, что имеет смысл. Я не уверен, почему он не делает это на моем месте. Кроме того, ': not (: text)', похоже, не работает на JSFiddle –

+0

Можете ли вы предоставить ссылку на свою скрипку? – Barmar

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