2009-07-31 13 views
16

Szukałem dobrej oferty i nie mogę znaleźć satysfakcjonującego rozwiązania. Mam nadzieję, że ktoś może pomóc.Wykrywanie kodu JavaScript przy wykryciu Mouseup

Podczas gdy używam jQuery, piszę również wiele tysięcy linii Javascript. Więc "czyste" rozwiązanie javascript jest w porządku.

Próbuję ustalić, czy klawisz kontrolny jest fizycznie zatrzymany na zdarzenie mouseup. To jest to; nie ma innych warunków wstępnych. Czy ktoś wie, jak to zrobić w sposób niezawodny, w różnych przeglądarkach?

Próbowałem przechowywania to w zmiennej stanu zauważając, gdy klawisz zostanie naciśnięty i zwolniony:

// BEGIN store control key status in hash_state 
$().bind('keydown','ctrl',function(arg_obj_e){ 
    hash_state.sw_ctrldn = true; 
    console.debug(hash_state.sw_ctrldn); 
}); 
$().bind('keyup','ctrl',function(arg_obj_e){ 
    hash_state.sw_ctrldn = false; 
    console.debug(hash_state.sw_ctrldn); 
}); 
// END store control key status in hash_state 

Jednak to naprawdę nie działa. Jeśli przetestujesz to za pomocą firebuga i obejrzysz konsolę, zobaczysz, że automatyczne powtarzanie wydaje się mieć miejsce, a wartość przełącza się.

I obejrzał mouseUp imprezę, aby zobaczyć, czy jest coś przydatny tam, ale bezskutecznie:

var debugEvent = function(arg_obj_e){ 
    var str = ''; 
    for (var attr in arg_obj_e){ 
    str += attr + ': ' + arg_obj_e[attr] + '\n'; 
    } 
    console.debug(str); 
} 

Każda pomoc będzie mile widziane.

+0

Wow, nie wiedziałem, że jQuery obsługiwał kluczowe zdarzenia w ten sposób. Nie mogę znaleźć żadnej dokumentacji tego. Czy działa również funkcja $(). Bind() (puste jQuery), czy jest to tylko skrót? Jeśli tak, czy jest powiązany z $ (dokument)? – eyelidlessness

+0

@eyelidlessness: Ten rodzaj powiązania pochodzi z wtyczki o nazwie js-hotkeys http://code.google.com/p/js-hotkeys/ – CMS

Odpowiedz

32

Można użyć właściwości event.ctrlKey.

$(function(){ 
    $('#elementId').mouseup(function(e){ 
    var isCtrlPressed = e.ctrlKey; 
    // true or false whether ctrl is pressed or not 
    }); 
}); 

Sprawdź bieżący przykład: here.

+0

Wow, szukałem tej właściwości podczas debugowania zdarzenia i musiałem pominąć to. Dziękuję Ci! Działa jak urok na FF3; teraz, aby zobaczyć o IE. –

+0

ps dziękuję za wersję demonstracyjną, jest to bardzo doceniane. –

+0

Witaj Michael, te kluczowe modyfikatory (shiftKey, ctrlKey, altKey) zostały wprowadzone w standardzie * DOM Level 2 * (http://is.gd/1Vryp) pod koniec 2000 roku i są obsługiwane od IE6. – CMS

Powiązane problemy