JQuery селектор для документа и другого элемента - PullRequest
0 голосов
/ 13 ноября 2011

Могу ли я объединить их в JQuery?Я использую плагин HotKeys.

$(document).bind('keydown', 'n', cycleNoise);
$(document).bind('keydown', 's', pickRandom);
$(document).bind('keydown', 'v', toggleTasks);
$(document).bind('keydown', 't', toggleTimer);
$(document).bind('keydown', 'up', hideTask);
$(document).bind('keydown', 'down', nextTask);
$('#duration').bind('keydown', 't', toggleTimer);
$('#duration').bind('keydown', 'n', cycleNoise);
$('#duration').bind('keydown', 's', pickRandom);
$('#duration').bind('keydown', 'v', toggleTasks);
$('#duration').bind('keydown', 'up', hideTask);
$('#duration').bind('keydown', 'down', nextTask);

Другими словами, возможно ли использовать document и '#duration' в одном и том же селекторе.Кажется, что следующее не работает:

$(document + ',#duration').bind(...);

EDIT :

Я использую плагин jQuery HotKeys .Это предотвращает образование пузырьков в текстовых полях.Могу ли я отключить эту функцию только для этого конкретного текстового поля , изменив источник?Если это так, пожалуйста, дайте мне знать, как.

Также плагин объединяет события нажатия клавиш или он действительно подключает 12 отдельных обработчиков?Я не понимаю jQuery достаточно хорошо, чтобы решить это.Как лучше всего достичь желаемого эффекта (действие с горячими клавишами, кроме случаев, когда в текстовых полях - кроме как в '#duration', где горячие клавиши должны быть связаны).

Ответы [ 4 ]

2 голосов
/ 13 ноября 2011

Вот, пожалуйста,

$( [ document, input ] ).
    keydown( 'n', cycleNoise ).
    keydown( 's', pickRandom ).
    keydown( 'v', toggleTasks ).
    keydown( 't', toggleTimer ).
    keydown( 'up', hideTask ).
    keydown( 'down', nextTask );

, где input - ссылка на ваш элемент INPUT.В этом случае:

var input = $( '#duration' )[0];

Другое решение -

$( '#duration' ).add( document ). // etc.
2 голосов
/ 13 ноября 2011

Это также должно работать,

var keys = {
    'n': cycleNoise,
    's': pickRandom,
    ....
    ..
    ..
}

$.each(keys, function(key, callback) {
    $(document).add("#duration").bind('keydown', key, callback);
})

Также рассмотрите ответ ThiefMaster.

1 голос
/ 13 ноября 2011

Благодаря пузырьковому событию обработчик событий, привязанный к самому документу, получит все события - так что вы можете просто удалить события $('#duration').

Ваши обработчики сработают для всех ключейКстати, вы не можете ограничить их - вам нужно проверить, какая клавиша была нажата, используя e.which (при условии, что первый параметр функции-обработчика назван e) в самой функции.

1 голос
/ 13 ноября 2011

Это должно работать:

$('body ,#duration').bind(...);

На самом деле, если вы связываетесь с документом, вам не нужно связываться ни с чем другим.

Как уже отмечали другие, ваш синтаксис привязки клавиш также неверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...