Domanda

Ho una pagina web in cui mi piacerebbe rimappare Ctrl + N con un comportamento diverso. Ho seguito l'esempio di YUI del registro dei Key Listeners e la mia funzione è chiamata ma Firefox crea ancora una nuova finestra del browser. Le cose sembrano funzionare bene su IE7. Come posso impedire la visualizzazione della nuova finestra?

Esempio:

var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 },
             {fn:function(event) {
                     YAHOO.util.Event.stopEvent(event); // Doesn't help
                     alert('Click');}});
kl2.enable();

È possibile rimuovere il comportamento predefinito. Google Documenti sostituisce Ctrl + S per salvare il documento invece di aprire la finestra di dialogo di salvataggio di Firefox. Ho provato l'esempio sopra con Ctrl + S ma la finestra di dialogo di salvataggio di Firefox si apre ancora. Poiché Google può impedire la visualizzazione della finestra di dialogo di salvataggio, sono sicuro che esiste un modo per impedire la maggior parte delle scorciatoie da tastiera predefinite.

È stato utile?

Soluzione

Il trucco è che la funzione 'fn' è whack.

Sperimentalmente, puoi vedere che il tipo di funzione per fn accetta due parametri. Il primo parametro contiene effettivamente il TIPO di evento. Il secondo contiene ... e questo è complicato: un array che contiene il punto di codice all'indice 0 e l'oggetto evento effettivo all'indice 1.

Quindi cambiando un po 'il codice, dovrebbe apparire così:

function callback(type, args)
{
    var event = args[1]; // the actual event object
    alert('Click');

    // like stopEvent, but the event still propogates to other YUI handlers
    YAHOO.util.Event.preventDefault(event);
}
var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 }, {fn:callback});
kl2.enable();

Inoltre, per amore di lisp, non usare punti di codice grezzi nel tuo codice. Usa 'N'.charCodeAt (0) invece di "quot" 78 ". O avvolgilo come una funzione

function ord(char)
{
    return char.charCodeAt(0);
}

Altri suggerimenti

Sto solo indovinando qui, ma non credo che si possa fare.

Se è possibile, sicuramente non dovrebbe esserlo. Le scorciatoie da tastiera generiche sono qualcosa con cui non si deve scherzare. Qual'è il prossimo? Agganciare il pulsante di chiusura della finestra per aprire una nuova finestra ...

Utilizzando l'utilità eventi di YUI, potresti provare a utilizzare Metodo stopEvent :

Tuttavia, poiché la maggior parte degli utenti è abituata a quei tasti premuti facendo una cosa particolare nel browser (nuova finestra nel tuo esempio), evito sempre scontri, il che in effetti significa che non uso nessuno dei meta o dei tasti di controllo.

Uso semplicemente le lettere, da solo, il che va bene fino a quando non si hanno caselle di testo, quindi questo consiglio potrebbe essere meno utile per te.

Sebbene l'override delle scorciatoie predefinite del browser non sia banale, in alcuni casi vale la pena farlo poiché dà un aspetto più professionale dell'applicazione. Dai un'occhiata a questo script:

http://www.openjs.com/scripts/events /keyboard_shortcuts/index.php#disable_in_input

Si scopre che funziona bene per me ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top