Комментарии 82
ссылка на демо не работает
Есть такая хорошая библиотека как: Handling Keyboard Shortcuts, для подключения клавиатурных сокращений. И там вроде проблем с нажатием нескольких кнопок нет.
Посмотрите, может поможет в решении
Посмотрите, может поможет в решении
да, серьёзно. уверен, там можно почерпнуть пару идей.
Ctrl+Enter (и подобные с Ctrl) — это обычно спорная комбинация.
Пользователям макинтоша будет неудобно пользоваться ей, там клавишу Ctrl заменяет клавиша ⌘ (Аналогична клавише «Win» на стандартных клавиатурах).
Например, вот так выполняются стандартные опции правки:
Копировать: ⌘+C
Вставить: ⌘+V
и т.д.
Конечно заморачиватся будут те, у кого либо проект имеет тематику MacOS, либо держатся обоими руками за кроссплатформенность.
Обычно, конечно, останавливаются на варианте в пользу большинства — т.е. на комбинациях с Ctrl или общей заменой на клавишу Alt.
Пользователям макинтоша будет неудобно пользоваться ей, там клавишу Ctrl заменяет клавиша ⌘ (Аналогична клавише «Win» на стандартных клавиатурах).
Например, вот так выполняются стандартные опции правки:
Копировать: ⌘+C
Вставить: ⌘+V
и т.д.
Конечно заморачиватся будут те, у кого либо проект имеет тематику MacOS, либо держатся обоими руками за кроссплатформенность.
Обычно, конечно, останавливаются на варианте в пользу большинства — т.е. на комбинациях с Ctrl или общей заменой на клавишу Alt.
в моих проектах будут совершенно не эти комбинации клавиш.
например, консольный форум. Сейчас там это реализовано через одно место.
Ctrl+enter — был просто как пример, один из самых частоиспользуемых.
например, консольный форум. Сейчас там это реализовано через одно место.
Ctrl+enter — был просто как пример, один из самых частоиспользуемых.
всегда ⌘ приравнивал к виндовской alt.
А вообще не встречал проектов, где не работает ctrl. Все такие кросстлапформенные? Я просто не исследовал этот вопрос.
А вообще не встречал проектов, где не работает ctrl. Все такие кросстлапформенные? Я просто не исследовал этот вопрос.
Command в маке определяется как meta. event.сtrlKey||event.metaKey в большинстве случаев решают проблему
полезная вещь. Может существенно увеличить возможности если правильно применить.
Только вот я назвал бы не keyboard, а readkey или типа того…
Только вот я назвал бы не keyboard, а readkey или типа того…
у вас третий параметр по умолчанию false? мне кажется, лучше true.
(аргументы привести не могу, пятой точкой чувствую)
(аргументы привести не могу, пятой точкой чувствую)
Нажмите сочетание клавишу 5: нажимаю на цифру пять выше букв — работает, справа на клавиатуре — не работает.
да, num-pad — имеет другие коды. не знаю, правильно ли будет использовать те же текстовые ключи, что и для верхних чисел.
Вы когда вводите пароли с числами — для системы имеет значения, ввели вы число с верхней части или с цифровой.
это утверждение, или риторический вопрос? если вопрос, то, насколько я знаю, значения не имеет. но, опять же, на примере с игрой, восьмёрка на цифровой панели может использоваться в качестве «движения вперед», а восьмёрка над буквами — подходит для этого намного меньше.
в данном случае видимо речь идет именно о скэн-кодах
это смотря куда вводить)) есть программы для которых имеет.
Имхо когда используется буквенное название клавиш — группировать. Когда явно используются коды клавиш — не группировать. Мне кажется, это вполне очевидный выбор.
Если в Файерфоксе включён пункт Tools → Options → Advanced → General → Accessibility → Search for text when I start typing, тогда нажатие клавиш «x», «c», «v» не только регистрируется джаваскриптом, но и (прежде всего) используется для поиска текста на странице (см. также баг 215024).
Быть может, jQuery.keyboard следовало бы вызывать event.preventDefault() на уровне document, чтобы уничтожать события клавиатуры и тем предотвратить такое поведение? Подобным образом поступает GMail, например.
Быть может, jQuery.keyboard следовало бы вызывать event.preventDefault() на уровне document, чтобы уничтожать события клавиатуры и тем предотвратить такое поведение? Подобным образом поступает GMail, например.
мне кажется, достаточно будет даже return false в конце функции, но за event.preventDefault() — спасибо.
Подозреваю, что если return false в конце слушателя события, то оно эдак может не всплыть даже к родительскому элементу. Что вызовет какие-нибудь неприятности, если одно и то же событие обрабатывается и в некотором элементе (например, textarea), и в окаймляющем его родительском элементе (например, form). Лучше убивать событие на уровне document (когда оно проплыло снизу вверх по всем родительским элементам из точки возникновения события), просто чтобы не пустить его ещё выше (т. е. во браузер). Причём, возможно, убивать только в том случае, когда соответствующая клавиша задействована в каких-нибудь комбинациях (было бы неразумно убивать, например, Ctrl+Ins и Ctrl+Del, если на странице они не переопределены).
Если нажать в demo:
ctrl+alt -> «ctrl+alt»
не отпуская их нажать 5 -> «5, ctrl+alt»
отпустить все клавиши -> «ctrl+alt»
Конечно ситуация маловероятная, но по крайне мере событие при отпускании клавиш не должно срабатывать.
ctrl+alt -> «ctrl+alt»
не отпуская их нажать 5 -> «5, ctrl+alt»
отпустить все клавиши -> «ctrl+alt»
Конечно ситуация маловероятная, но по крайне мере событие при отпускании клавиш не должно срабатывать.
ну, я думаю, это вполне логично решение. допустим, «ктрл-ентер» делает отступ к началу следующей страницы (как в Ворде, емнип). Я хочу пропустить несколько страниц — зажимаю ктрл и, несколько раз, ентер. Ну это грубый пример, конечно. Или, в той же игрушке, «ктрл» — выстрел, а «альт-ктрл» — альтернативный выстрел. Я держу зажатым «альт» и нажимаю время от времени «ктрл».
И тем не менее, если в настройках Quake II сказано:
По той же логике и jQuery.keyboard, если при нажатом Ctrl+Alt тыкать 5, вероятно, не должен воспринимать это как повторное срабатывание Ctrl+Alt.
Хотя, наверное, включение этой логики как раз и определяется состоянием параметра single.
bind F6 "echo Quick Saving...; wait; save quick"то при нажатии F6 сохранение происходит (один раз), но если нажатый F6 не отпускать, то дальнейшее жмякание правой кнопкою мыши вызывает простое подпрыгивание персонажа, без повторного сохранения игры.
bind MOUSE2 "+moveup"
По той же логике и jQuery.keyboard, если при нажатом Ctrl+Alt тыкать 5, вероятно, не должен воспринимать это как повторное срабатывание Ctrl+Alt.
Хотя, наверное, включение этой логики как раз и определяется состоянием параметра single.
Не видел игр, где отпускание клавиши инициирует тоже событие, что и при нажатии.
Пример при зажатом ctrl и последовательном нажимании клавиши enter(т.к. это условия одной комбаниции), не тоже самое, что повторный вызов нажатия зажатой комбинации при любом событии от клавы, + к этому ещё добавляется вызов зажатой комбинации при её отпускании(и вот это точно не должно происходить).
Пример при зажатом ctrl и последовательном нажимании клавиши enter(т.к. это условия одной комбаниции), не тоже самое, что повторный вызов нажатия зажатой комбинации при любом событии от клавы, + к этому ещё добавляется вызов зажатой комбинации при её отпускании(и вот это точно не должно происходить).
не знаю, как в аське, но у меня в PSI так:
при нажатии на enter — отправляется новое сообщение
при нажатии на ctrl-enter — переход на новую строку
при нажатии на alt-enter или ctrl-alt-enter не происходит ничего
точно такую же функциональность можно реализовать у меня, передав в качестве третьего параметра single — true.
при нажатии на enter — отправляется новое сообщение
при нажатии на ctrl-enter — переход на новую строку
при нажатии на alt-enter или ctrl-alt-enter не происходит ничего
точно такую же функциональность можно реализовать у меня, передав в качестве третьего параметра single — true.
А у меня при нажатии x+c+v события не регистрируются, просто вводится текст в форму. Ubuntu 9.04/Firefox 3.0
kUbuntu 9.10/Firefox 3.5, работает нормально.
может, какой-то плагин? или, попробуйте обновить и еще раз повторить попытку.
может, какой-то плагин? или, попробуйте обновить и еще раз повторить попытку.
сtrl+Enter у вас так же срабатывает как и enter+ctrl, тоже самое и с другими комбинациями x+c+v или v+c+x.
проверил на хабре комбинацию alt+shift+r и shift+alt+r, тоже работает :)
Знаком + обычно обозначают единовременное нажатие клавиш, причём тут последовательность их зажатия.
в некоторых ситуациях должна быть строгая последовательность. Например, в аське на enter идет отправка сообщения, а на ctrl+enter переход строки.
Ну такое можно реализовать, но отдельно :)
не знаю, как в аське, но у меня в PSI так:
при нажатии на enter — отправляется новое сообщение
при нажатии на ctrl-enter — переход на новую строку
при нажатии на alt-enter или ctrl-alt-enter не происходит ничего
точно такую же функциональность можно реализовать у меня, передав в качестве третьего параметра single — true.
при нажатии на enter — отправляется новое сообщение
при нажатии на ctrl-enter — переход на новую строку
при нажатии на alt-enter или ctrl-alt-enter не происходит ничего
точно такую же функциональность можно реализовать у меня, передав в качестве третьего параметра single — true.
Чем вот это не подошло? rikrikrik.com/jquery/shortkeys/
я, кстати, проглянул код (не проверял на практике, правда, потому не уверен, но):
1. я не увидел там работы с ctrl, shift, alt, meta. ни в примерах, ни в коде. подозреваю, что их использовать нельзя
2. в отличии от моей либы — там копируется в каждом объекте весь функционал. подозреваю, это может стать причиной утечки памяти. у меня весь функционал вынесен в отдельное место, а в объекте — только контейнеры и вызов.
3. не вижу, чтобы там был функционал, реализуемый у меня с помощью параметра single. тогда, в каком режиме там обрабатываются нажатия?
1. я не увидел там работы с ctrl, shift, alt, meta. ни в примерах, ни в коде. подозреваю, что их использовать нельзя
2. в отличии от моей либы — там копируется в каждом объекте весь функционал. подозреваю, это может стать причиной утечки памяти. у меня весь функционал вынесен в отдельное место, а в объекте — только контейнеры и вызов.
3. не вижу, чтобы там был функционал, реализуемый у меня с помощью параметра single. тогда, в каком режиме там обрабатываются нажатия?
code.google.com/p/js-hotkeys/ отличный плагин… не помню чтобы имел с ним проблем
как на счёт аналога Single, и возможности соединять, например, разные буквы? Не подумайте, что я ищу к чему придраться — это действительно важно для меня.
single там просто не нужен… если указано «a» то событие будет вызвано только при нажатии а… если «ctrl+a» то при контроль+а…
поддерживаются все естественные сочетания, можно юзать название
в итоге можно повесить «ctrl+alt+backspace»
jshotkeys.googlepages.com/test-static-01.html — вот пример всех сочетаний
поддерживаются все естественные сочетания, можно юзать название
в итоге можно повесить «ctrl+alt+backspace»
jshotkeys.googlepages.com/test-static-01.html — вот пример всех сочетаний
и еще имхо еще я бы Ваш параметр single назвал как минимум strict — он более описывает его суть
что-то alt-комбинации не ловятся.
Вот как раз поэтому этот параметр и нужен. Мне необходимо, чтобы несмотря на то, что зажаты другие клавиши отрабатывались все комбинации(я приводил примеры с игрой в топике)
single там просто не нужен… если указано «a» то событие будет вызвано только при нажатии а… если «ctrl+a» то при контроль+а…
Вот как раз поэтому этот параметр и нужен. Мне необходимо, чтобы несмотря на то, что зажаты другие клавиши отрабатывались все комбинации(я приводил примеры с игрой в топике)
Более наглядно будет если указывать сочетания клавиш через +, например $('form').keyboard('Ctrl+Enter', function() {});, а если надо разные сочетания обработать в одной функции, можно их через запятую перечислить.
сначала так и сделал, но потом — поменял. мне все-же кажется, что человеку привычнее читать и писать через пробел (тем более, не надо нажимать шифт)), плюс знак "+" тоже, возможно, будет использоватся в качестве названия клавиши. Например, «ctrl shift +»
И, все же. мне кажется, что когда идёт сплошной поток символов — тяжелее читать.
И, все же. мне кажется, что когда идёт сплошной поток символов — тяжелее читать.
Программирование это не урок печати, шифт и так часто нажимается. Первое что я подумал, что это обработка любой клавиши, нажимал тупо xxx и ничего не происходило, а оказывается надо было нажать x+c+v.
Плюс скорее всего не будет использоваться, ведь его надо с шифтом нажимать, поэтому сочетание будет Ctrl+Shift+=, ну или если очень хочется, можно записать как Ctrl++ (что то же самое по сути).
Просто везде пишут именно так, через знак «плюс», поэтому это более привычная форма.
Плюс скорее всего не будет использоваться, ведь его надо с шифтом нажимать, поэтому сочетание будет Ctrl+Shift+=, ну или если очень хочется, можно записать как Ctrl++ (что то же самое по сути).
Просто везде пишут именно так, через знак «плюс», поэтому это более привычная форма.
плюс есть на панели справа, я говорил о нём=)
согласен, форма более привычная. думаю, можно. конечно, добавить как алиас, но тогда знак плюса уже будет недоступен.
согласен, форма более привычная. думаю, можно. конечно, добавить как алиас, но тогда знак плюса уже будет недоступен.
Скажите, что в функцию передается?
5 на цифровой клавиатуре не ловится.
Так и должно быть?
Может, стоит подумать о вариантах?
Так и должно быть?
Может, стоит подумать о вариантах?
на счёт 5: habrahabr.ru/blogs/jquery/76424/#comment_2220493
подумать о вариантах чего?
подумать о вариантах чего?
Не, я имею ввиду что просто кнока 5 на обычной клавиатуре ловится вашим скриптом, а на цифровой (справа) – не ловится.
ой, ошибся, дал немного не ту ссылку.
habrahabr.ru/blogs/jquery/76424/#comment_2220456
habrahabr.ru/blogs/jquery/76424/#comment_2220456
не срабатывает:
1. Ctrl+Alt != Alt+Ctrl?.. Почему? По нажатию Alt+Ctrl ничего не происходит.
2. Левый Ctrl + Alt != Правый Ctrl + Alt?
1. Ctrl+Alt != Alt+Ctrl?.. Почему? По нажатию Alt+Ctrl ничего не происходит.
2. Левый Ctrl + Alt != Правый Ctrl + Alt?
Большое спасибо!
Давно хотел реализовать сохранение по Ctrl+S, но руки не доходили найти подходящие мануалы, а тут все так очевидно.
Давно хотел реализовать сохранение по Ctrl+S, но руки не доходили найти подходящие мануалы, а тут все так очевидно.
Забавный баг (Firefox 3.5.5, Windows 7)
1. Открыть freecr.ru/jquery.keyboard/
2. Открыть ещё 4 вкладки.
3. Нажать Ctrl+5 (FireFox переключится в пятую вкладку).
4. Вернуться на страницу демо.
5. Теперь нажатие любой клавиши будет вызывать событие, повешенное на «5». Если нажать на «5», это безобразие прекращается.
1. Открыть freecr.ru/jquery.keyboard/
2. Открыть ещё 4 вкладки.
3. Нажать Ctrl+5 (FireFox переключится в пятую вкладку).
4. Вернуться на страницу демо.
5. Теперь нажатие любой клавиши будет вызывать событие, повешенное на «5». Если нажать на «5», это безобразие прекращается.
Спасибо за плагин. Небольшое замечание. В JQuery принято аргумент-функцию передавать последней, даже когда есть необязательные аргументы (например, обратите внимание на метод $.post). То есть, по-хорошему, Вам нужно переписать Ваш плагин так, чтобы он понимал как такой синтаксис вызова keyboard('keys', function(){}), так и такой keyboard('keys', flag, function(){})
Недавно сталкивался с необходимостью обработки нажатий. В проекте используется jQuery. Искал плагины. Но в итоге решил воспользоваться стандартными средствами jQuery (http://docs.jquery.com/Events/keypress). Ибо подгрузка дополнительных библиотек дело все же сомнительное, т.к. их и так уже много используется. Конечно есть оптимизаторы и слияние в единый зазипованый файлик, но в живом проекте всегда приходится что-то править и дописывать. Каждый раз сливать JS-ы не всегда удобно. Понятно, что есть функции, которых в стандартном keypress не хватит, но для стандартных задач, мне кажется вполне достаточно.
В демке нажимаем CTRL-ALT и начинаем активно плясать на клавиатуре. ))
Как у вашего плагина обстоят дела с регистрацией нажатий в русской раскладке?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
jQuery.keyboard v0.1.0