2010-09-09 16 views
35

Vorrei aggiungere il supporto per le scorciatoie da tastiera a un paio di pagine nella mia applicazione Web intercettando il gestore di eventi keypress dell'oggetto documento, non l'attributo accesskey.Sovrascrittura delle scorciatoie da tastiera del browser

Il problema è che ogni browser ha le proprie combinazioni di tastiere, quindi è impossibile trovare un insieme di combinazioni di tasti che funzionino su tutti i browser Web e comunque coerenti (ad esempio sarebbe sciocco se il collegamento per salvare era Ctrl + Maiusc + S mentre quello per cancellare è stata Alt + D.)

Così ho pensato che sarebbe stato solo più semplice per ignorare le scorciatoie del browser del tutto in un paio di pagine con mia .

Tutto il lato negativo a parte, è possibile? Se così, come fai a farlo?

+2

Su una nota personale, si prega di evitare sovrascrivendo scelte rapide del browser comuni che sono coerenti tra i browser come 'Cw',' Ct', 'CSt' ... Alcuni dei prodotti di Google sovrascrivono le scorciatoie del browser comuni e la sua incredibilmente fastidioso ! –

+1

Può essere difficile sapere quali sono le scorciatoie utente "comuni". Ad esempio, molti utenti usano 'C-e' o è relativamente semplice da ignorare? Sarebbe bello avere un grafico delle percentuali di utenti che utilizzano ciascuna scorciatoia del browser. – JKillian

risposta

12

C'è un eccellente copertura di questo qui: http://unixpapa.com/js/key.html

Per quanto riguarda se questo è qualcosa che dovrebbe essere fatto, un bel paio di chiavi di StackOverflow domanda redattore di forzatura senza interrompere troppo (passaggio del mouse sui pulsanti della barra degli strumenti) .

+3

È necessario gestire l'evento * keydown * con 'e.preventDefault(); e.stopPropagation(); '. Durante la gestione di keydown una cosa da ricordare è che può verificarsi più volte se l'utente mantiene premuto il tasto per un po 'più a lungo. – ShitalShah

+7

Dovresti rispondere alla domanda direttamente su Stack Overflow, non collegare da qualche altra parte (i link esterni possono rompersi o cambiare o non rispondere direttamente alla domanda). Vedi [Le risposte contengono solo collegamenti altrove "buone risposte"?] (Http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers). – mgiuca

+0

Odio davvero il modo in cui Ctrl-L viene rubato quando sto usando l'editor di domande di StackOverflow, però. Rende più difficile fare ricerche sul Web mentre si modificano le domande. –

29
onkeydown = function(e){ 
    if(e.ctrlKey && e.keyCode == 'S'.charCodeAt(0)){ 
    e.preventDefault(); 
    //your saving code 
    } 
} 
+5

In molte situazioni, non penso che funzionerebbe. Con i tasti "tab", molti browser intercetteranno il comando prima che lo script possa alterare il comportamento della chiave in modo corretto. – Trafalmadorian

+4

'event.preventDefault' funziona solo (quando funziona) su browser compatibili con W3C, non (per esempio) sul browser principale sul Web generale, Microsoft - a meno che, naturalmente, tu stia utilizzando una libreria come jQuery che la aggiunge in per te. –

+3

T.J.> Intendi che jQuery può ignorare le scorciatoie da tastiera anche su IE? –

8

Qui è la mia soluzione a questo problema:

maggior parte (se non tutti) dei tasti di scelta rapida del suo navigatore verrà sovrascritto. Solo quelli di sistema, come Alt + Scheda o Windows non funzionerà con la chiave di Windows.

document.onkeydown = overrideKeyboardEvent; 
document.onkeyup = overrideKeyboardEvent; 
var keyIsDown = {}; 

function overrideKeyboardEvent(e){ 
    switch(e.type){ 
    case "keydown": 
     if(!keyIsDown[e.keyCode]){ 
     keyIsDown[e.keyCode] = true; 
     // do key down stuff here 
     } 
    break; 
    case "keyup": 
     delete(keyIsDown[e.keyCode]); 
     // do key up stuff here 
    break; 
    } 
    disabledEventPropagation(e); 
    e.preventDefault(); 
    return false; 
} 
function disabledEventPropagation(e){ 
    if(e){ 
    if(e.stopPropagation){ 
     e.stopPropagation(); 
    } else if(window.event){ 
     window.event.cancelBubble = true; 
    } 
    } 
} 
+4

Questo non impedisce a ALT + E di aprire il menu di modifica del browser. –

Problemi correlati