2012-07-16 18 views
12

Utilizando uno de los ejemplos de una pregunta anterior que tengo:jQuery para Cmd + s y Ctrl + s

$(window).keypress(function(event) { 
    if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true; 
    $("form input[name=save]").click(); 
    event.preventDefault(); 
    return false; 
}); 

¿Es también posible cambiar esto funcione para la tecla cmd Mac?

He intentado (!(event.which == 115 && (event.cmdKey || event.ctrlKey)) && !(event.which == 19)) pero esto no funcionó.

+1

posible duplicado de [? ¿Cómo puedo capturar CTRL + S en jQuery] (http://stackoverflow.com/questions/ 5833325/how-can-i-capture-commands-in-jquery) ':)' –

+0

Los eventos clave son bastante inconsistentes entre los navegadores y el sistema operativo. Simplemente codifique un pequeño ejemplo y compruebe qué teclas y modificadores se activan al presionar cmd + S. – Christoph

+0

No puedo decirlo con certeza, pero como regla general, creo que quieres evitar cambiar los comportamientos predeterminados del navegador (ctrl + s/cmd + s === "Guardar página como") –

Respuesta

22

Uso del event.metaKey para detectar el comando de teclado

$(document).keypress(function(event) { 
    if (event.which == 115 && (event.ctrlKey||event.metaKey)|| (event.which == 19)) { 
     event.preventDefault(); 
     // do stuff 
     return false; 
    } 
    return true; 
}); 
+3

Typo missing bracket. Traté de editar esto pero recibo un error: "Las ediciones deben tener al menos 6 caracteres, ¿hay algo más que mejorar en esta publicación?" estúpido stackoverflow –

+6

lamentablemente esto no funciona para mí en Chrome (Versión 27.0.1453.110). siempre abre el cuadro de diálogo "guardar como" ... - CTRL + S funciona por otro lado –

+0

Sweet 'metaKey' – brasofilo

3

Para detectar ctrl+s y cmd+s, puede utilizar de esta manera:

Working jsFiddle.

jQuery:

var isCtrl = false; 
$(document).keyup(function (e) { 
if(e.which == 17) isCtrl=false; 
}).keydown(function (e) { 
    if(e.which == 17) isCtrl=true; 
    if(e.which == 83 && isCtrl == true) { 
     alert('you pressed ctrl+s'); 
    return false; 
} 
}); 

source (includes all keyboard shorcuts and buttons)

+0

Bien, ¿puedes explicarlo? ¿Por qué esta es una solución mejor que la otra respuesta? –

+0

En mi Macbook (Chrome y Safari) cmd + s no funciona hasta que presione ctr + s. Entonces ambos funcionan. Extraño. –

+0

@ T.BrianJones me pasó lo mismo en diferentes navegadores. Supongo que la función 'save' del navegador impide nuestra función /: –

1

Esto funciona para mí:

$(document).keypress(function(event) { 
    if ((event.which == 115 || event.which == 83) && (event.ctrlKey||event.metaKey)|| (event.which == 19)) { 
     event.preventDefault(); 
     // do stuff 
     return false; 
    } 
    return true; 
}); 
Cuestiones relacionadas