Как стать автором
Обновить

Комментарии 59

я раньше наткнулся на проблему уловить событие cmd+s (на маке), как тут с этим?
честно, на Маке не проверял, в силу отсутствия оного. если есть желающие с этим помочь(хотя бы быть моими глазами) — буду рад.
а в чём была проблема?
с удовольствием помогу.
проблема в том, что несмог поймать именно клавишу CMD

сейчас при клике в текстовом поле на странице демо-версии кливиш SHIFT+CMD (именно в такой последовательности, CMD+SHIFT не срабатывает) появляется «z+x+c, shift+[space|(letters)|(n3-n6)|(fkeys)]»
Написал в личку
Я сталкивался с тем, что у jQuery в keydown есть код
// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
if ( !event.metaKey && event.ctrlKey )
  event.metaKey = event.ctrlKey;


Этот код мешает нормально ловить сочетания клавиш с ctrl, но без cmd на Маке.
я не использую event.metaKey и event.ctrlKey
shift+[space|(letters)|(n3-n6)|(fkeys)]
нажимаю shift+7 то же срабатывает
спасибо, пофиксил, везде обновил код
Мне кажется круто было сделать чтоб обрабатывались еще цифры, набранные на нумпаде (если это возможно, конечно).
возможно, обрабатывается. набор (numpad), или индекс nb[0-9].
Ну я тут даже про то, что может есть смысл обрабатывать их и в наборе (numbers)? Ведь это суть одно и то же для пользователя.
я думал про это и даже в предыдущем топике обсуждали…
все-же решили, что пусть разработчик сам решает, тем более можно сделать так:
$.keyboard('shift+[(numbers)|(numpad)]'fn)
но я принимаю и рассматриваю все аргументы «за» и «против»
Вообще классная штука, сразу видно человек старался.

Ранее не пользовался сокращениями так как не знал как толком обработать — теперь нужно придумать что то в своих работах.

Спасибо.
очень старался, и вам спасибо=)
хоть я и противник всяких билиотек, но идея отличная :) отсутствием гибкости ваш плагин страдать, похоже, не будет
сделаю всё, что в моих силах =)
Кстати, пока не посмотрел примеры в гуглокоде, не разобрался что к чему. Там намного лучше описано чем здесь
ну, я вообще надеялся, что люди будут смотреть исходники в demo и, если чего-то не поймут, уже начнут разбираться в тексте.я, правда, не знаю, как описать это доступнее.
Большое спасибо, буду использовать.
[(letters)|(numbers)|space|(numpad)]

Нвесил событие на буквы, цифры, пробел и нумпад, и хочу ещё навесить точку с запятой, не подскажите как это сделать, а т оя мудрил-мудрил и чё-т отак и не понял :) Помогите плиз.
ой, стыдно признаться, я забыл добавить клавиши ;'[]. Так и думал, что что-то пропустил. Пока можно юзать их указывая соответствующие keyCode, но я щас добавлю индексы и залью новую версию.
Обновил, залил в репозитарии новую версию. Добавил недостающие индексы пунктуационных знаков + набор пунктуационных знаков. В вики на гуглокоде можно глянуть список всех индексов и список всех наборов
Родина вас не забудет!
Спасибо вам! Здорово получилось, мне на проекте понадобился определённый ф-ционал, и в этот же день я нахожу ваш плагин :)
Как говорится, Респект!
=)) спасибо, приятно, что я кому-то помог
Вы сделали просто офигительный плагин, который сам по себе добавляет возможность в несколько раз без вреда для пользователя повысить скорость работы с веб-приложением. Есть некоторый минус в том, что нельзя stop propagation — «заглушить» хоткей для браузера (например, чтобы по Ctrl+F4 не закрывалась вкладка), но, блин, он вообще малозначим в сравнении с плюсами. Отличная работа, побольше бы таких программеров!
Кстати, да, забыл сказать: Ubuntu 9.04, Firefox 3.0.14. Работает правильно, добавляйте в список поддерживаемых ОС и браузеров.
Есть некоторый минус в том, что нельзя stop propagation — «заглушить» хоткей для браузера
«preventDefault» в settingsах. передается объект в аргументе перед функцией =)
Возможно, я туплю, но за 5 минут не нашел человеческой ссылки для скачивания самой либы… :(
архивом — нету. но он есть в репозитариях. если не пользуетесь Hg, то можно её скачать например отсюда: https://jquerykeyboard.googlecode.com/hg/jquery.keyboard.js
как отписаться от события?
в предыдущей теме был пример:
// Снимаем действие
$.keyboard('ctrl alt');

Тем не менее, в планах поменять интерфейс на
$.keyboard('ctrl alt', null);

Пока можно использовать первый вариант (и, вроде, второй тоже сработает). Совместимость сохранится с помощью настройки в глобальном и/или локальном конфиге.
спасибо :)
Исходя из сказанного, получается, что на одно сочетание можно подписаться только один раз, правильно я понял? В то же время это противоречит механизму событий. Мне может понадобиться в разных местах программы подписаться на определенное сочетание и в какой-то момент отписаться от конкретных, не затрагивая при этом другие подписки и функционал.

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

unbind( [type], [fn] )

Доработаете ли вы функционал для более качественной работы на событийном уровне?
Не сомневайтесь, там всё реализовано вполне прилично =) Я выше просто примеры приводил. А $.keyboard(); равносильно $(document).keyboard();
Следующее будет работать вполне предсказуемо и радующе:
$('textarea.first' ).keyboard('ctrl enter'sendMsgFirst );
$('textarea.second').keyboard('ctrl enter'sendMsgSecond);
$('textarea.first' ).keyboard('ctrl enter', null);
$('textarea.second').keyboard('ctrl enter', null);
Взгляните на мой пример (обратите внимание на одинаковый selector):

$('textarea').keyboard('ctrl enter', sendMsg);
$('textarea').keyboard('ctrl shift enter', clearInputBox);

Как отписаться от обработчика «sendMsg»? :)
что на счёт $('textarea').keyboard('ctrl enter', null); ?
И от какого обработчика я при этом отпишусь? От «sendMsg» или от «clearInputBox»?
от sendMsg, наверное =)
Я хочу только от «sendMsg». Это возможно? :)
Простите, это был незначительный баг
// Строка 271
if (bind.cfg.event == e.originalEvent.type) {
// Заменить на
if (bind && bind.cfg.event == e.originalEvent.type) {

// Строка 308
if (args.keys.isDelete) {
// Заменить на
if (args.isDelete) {


После правки всё будет работать правильно и вполне ожидаемо:
var elem = $('textarea');
elem.keyboard('z+x'  , function () { alert (1); } );
elem.keyboard('z+x+c', function () { alert (2); } );
elem.keyboard('z+x');


сегодня внесу изменения в репозитарии на гуглокоде.
Простите, но мы, кажется, до сих пор друг руга не поняли :)

Я хотел бы иметь возможность отписываться от _конкретного_ обработчика. При этом все остальные обработчики должны продолжать корректно работать.

Резюмируя:

— иметь возможность подписывать любое кол-во обработчиков на одно и то же клавиатурное сокращение для одного и того же елемента;

— иметь возможность отписать любой и подписанных обработчиков, не затрагивая остальные;

Это то, как работают событийные механизмы в jQuery. Если вам нужно больше деталей мы можем обсудить это в скайпе (мой: Mezzario).
нет, я прекрасно понял всё. смотрите пример выше. при нажатии z+x+c сработает alert(2), но не alert(1).

То есть первое событие снимется, а второе — останется.

Скайп не юзаю, есть джаббер: shock@jabber.com.ua
К тому же подписываться обычно придется на документ (по причине того, что большинство элементов HTML не могут иметь фокуса) и тогда отписаться от конкретных обработчиков не получится.

Все эти наблюдения я описываю после использования вашего плагина на реальном проекте, так что не думайте, что я просто придираюсь :)
а не подскажите как, например, при нажатии на Alt+F перейти на другую ссылку?
думаю, как-то так:
$.keyboard('alt+f', function () {
window.location = newHref;
});
спасибо
Объясните, пожалуйста, какой смысл привешивать нажатие клавиш к чему-либо, кроме document? Я просто думал, что будет, к примеру, просто в функцию передаваться в качестве this текущий элемент, а оказалось что отлов нажатия ообще не срабатывает ни на чем кроме document.
$('textarea') =)
А, можно смотреть event[0].tagName

Умнее способа не придумал =)
а на какой объекте надо регистрировать нажатие? на том, на который наведен курсор? на том, в котором выделен текст?
Я делаю следующее: я вешаю на контрол+стрелки переключение страниц, а в функции-хендлере проверяю event[0].target.tagName, и обрабатываю нажатия только если tagName не input и не textarea.

Если есть способ сделать это правильнее и проще, подскажите, пожалуйста.
Спасибо за полезный модуль!
Попробовал на маке сделать отправку сообщений с помощью ctrl+enter либо cmd+enter и обнаружил проблему — работает только одна из этих комбинаций. Может я неверно задал настройки?
Указывал как [cmd|ctrl]+enter.
Пробовал задавать отдельными вызовами — тоже не работает.
Подскажите, как правильно настроить.
Спасибо.
НЛО прилетело и опубликовало эту надпись здесь
в хроме тоже не работает (
А мне не хватило .keypress, правда он там легко добавляется.
Спасибо за полезную библиотечку, уже пользуюсь.
Работает Ubuntu 10.10 Opera10.63 и FF3.6.12
НЛО прилетело и опубликовало эту надпись здесь
Спасибо большое! Очень пригодилось! Тока у вас демо отвалилось.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории