Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jquery обработать удержание клавиши ctrl и shift (https://javascript.ru/forum/jquery/13833-jquery-obrabotat-uderzhanie-klavishi-ctrl-i-shift.html)

pt81 15.12.2010 18:23

jquery обработать удержание клавиши ctrl и shift
 
Мне нужно сделать. Что бы в календарики, даты выделялись учитывая удержание ctrl и shift.

Аналогично механизму выбора файлов в обычном проводнике windows.

Опишу алгоритм:
Без зажатого ctrl или shift ткнул на 17 число оно выделилось, ткнул на 18, выделилось 18 а 17 выделение пропало.
С зажатым ctrl ткнул на 17 выделилось, ткнул на 18, выделено и 17 и 18. И так далее...
С зажатым shift ткнул на 17 выделились с 1 по 17. Выделил 17 зажал шифт и ткнул на 20 выделилось с 17 по 20-ое.

Поэтому нужен какой то механизм отслеживающий нажатость ctrl и shift.

Нагуглил только вот это:

http://plugins.jquery.com/project/keyhold

pt81 15.12.2010 19:53

Начал делать...
$(function(){
var mode = "none";
$(document).keyhold(function(event) {
//console.log("hold", event.keyCode);  
if(event.keyCode == 17)
{
mode = "ctrl";
}

});

$(document).click(function(){
console.log(mode);
});


});



Тут если зажат ctrl переменной присваивается значение. И при клике в любом месте документа можно проверять чему равно это значение. Да при зажатом контрол, оно меняется, но нужно что бы оно менялось обратно при отпускании контрол..

pt81 15.12.2010 20:05

Кажется достаточно обычных keydown и keyup

$(function(){
var mode = "none";
$(document).keydown(function(event) {
//console.log("keydown", event.keyCode);  
if(event.keyCode == 17)
{
mode = "ctrl";
}

}).keyup(function(event)
{
//console.log("keyup", event.keyCode); 
if(event.keyCode == 17)
{
mode = "not_ctrl";
}


});

$(document).click(function(){
//console.log(mode);
alert(mode)

});


});

Policeman 03.12.2011 00:43

Как обработать то же самое только в мак, ctrl + shift для select элемента с атрибутом multiple, нужно еще дописывать код?:)


Часовой пояс GMT +3, время: 00:52.