Плагины jQuery или почему иногда лучше изобрести велосипед: Почему я отказался от jquery.hotkeys

Проект: phpRecaller
Общая задача: построение оконного интерфейса.
Задание: использование горячих клавиш.

Естественно, прислушиваясь к мнениям множества, первым делом я нагуглил плагин. Называется он jquery.hotkeys, на тот момент кажется версии 0.7.  Сразу же прельстило написание удобных ярлычков вида «Alt+c» вместо кейкодов. Скачал, установил, стал его использовать в проекте, но как оказалось не надолго.

В проекте я практиковал вызов диалоговых окон jquery.ui.dialog через горячие клавиши. Каждое jquery-окно загружало содержимое через ajax.
Очень скоро всплыла проблема. Я заметил ее, когда отлаживая эти же горячие клавиши через firebug мониторил ajax-запросы. Оказалось, что при нажатии комбинации клавиш, вместо вызова одного ajax-запроса и одного окна, частично срабатывали вызовы и всех остальных. Частично, потому что появления окна как раз не происходило, а вот ajax запрос отправлялся. При этом при всем при клике мышью по аналогичной кнопке проблема не проявлялась.

Так быть не должно было. В чем причина, я разбираться не стал.

И сразу к решению.
Код проблемного участка:

$(document).bind("keydown", {combi:"Alt+f1"}, function (evt){ open_window(1); return false; }); // открыть окно
$(document).bind("keydown", {combi:"Alt+f2"}, function (evt){
open_window(2); return false; }); // открыть окно

после недолгих мучений этот код я переделал. Заменил keydown на keyup, чтобы событие срабатывало не так часто.

var key=[];
key["c"]=67;
key["f"]=70;
key["r"]=82;
key["space"]=32;
key["enter"]=13;

$(document).keyup(function(evt)
{
// открыть окно входящего вызова
// Ctrl+Shift+c (либо Alt+c для Opera)
if (evt.keyCode==key["c"] && (evt.altKey))
{
$(".new_window_activator").click();
return false;
}

// открыть окно перезвона
// Ctrl+Shift+r либо Alt+r
if (evt.keyCode==key[«r»] && (evt.altKey))
{
$(«.add_window_activator»).click();
return false;
}
});

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

Полезно(1)Бесполезно(0)

Добавить комментарий

4 Responses to “ Плагины jQuery или почему иногда лучше изобрести велосипед: Почему я отказался от jquery.hotkeys ”

  1. Вам нужно было добавить stopPropagation() в конец тела callback'a.

    Полезно(1)Бесполезно(0)
    • Городецкий

      Городецкий

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

      Полезно(0)Бесполезно(0)
  2. Алексей

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

    Полезно(1)Бесполезно(0)
    • Городецкий

      Городецкий

      Конечно не должно быть, но в данном случае использование нативных средств javascript я бы велосипедом не назвал.

      Полезно(0)Бесполезно(0)