Respuestas:
$(window).keypress(function(event) {
if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-S pressed");
event.preventDefault();
return false;
});
Los códigos clave pueden diferir entre los navegadores, por lo que es posible que deba verificar más de 115.
keydown
lugar de keypress
en cromo
Esto funciona para mí (usando jquery) para sobrecargar Ctrl+ S, Ctrl+ Fy Ctrl+ G:
$(window).bind('keydown', function(event) {
if (event.ctrlKey || event.metaKey) {
switch (String.fromCharCode(event.which).toLowerCase()) {
case 's':
event.preventDefault();
alert('ctrl-s');
break;
case 'f':
event.preventDefault();
alert('ctrl-f');
break;
case 'g':
event.preventDefault();
alert('ctrl-g');
break;
}
}
});
else if
no funcionará porque la if
declaración original ya se evaluará como verdadera. Tendrá que poner su código antes de la if
declaración original , convirtiendo el original en un else if
.
Podría usar una biblioteca de accesos directos para manejar las cosas específicas del navegador.
shortcut.add("Ctrl+S",function() {
alert("Hi there!");
});
Esta solución jQuery funciona para mí en Chrome y Firefox, tanto para Ctrl+ Scomo Cmd+ S.
$(document).keydown(function(e) {
var key = undefined;
var possible = [ e.key, e.keyIdentifier, e.keyCode, e.which ];
while (key === undefined && possible.length > 0)
{
key = possible.pop();
}
if (key && (key == '115' || key == '83' ) && (e.ctrlKey || e.metaKey) && !(e.altKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true;
});
e.key
lugar de e.which
;
Este funcionó para mí en Chrome ... por alguna razón me event.which
devuelve una S mayúscula (83), no estoy seguro de por qué (independientemente del estado de bloqueo de mayúsculas), así que solía fromCharCode
y toLowerCase
solo para estar seguro
$(document).keydown(function(event) {
//19 for Mac Command+S
if (!( String.fromCharCode(event.which).toLowerCase() == 's' && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-s pressed");
event.preventDefault();
return false;
});
Si alguien sabe por qué tengo 83 y no 115 , me alegrará saberlo, también si alguien prueba esto en otros navegadores, me alegrará saber si funciona o no.
Combiné algunas opciones para admitir FireFox, IE y Chrome. También lo actualicé para admitir mejor mac
// simply disables save event for chrome
$(window).keypress(function (event) {
if (!(event.which == 115 && (navigator.platform.match("Mac") ? event.metaKey : event.ctrlKey)) && !(event.which == 19)) return true;
event.preventDefault();
return false;
});
// used to process the cmd+s and ctrl+s events
$(document).keydown(function (event) {
if (event.which == 83 && (navigator.platform.match("Mac") ? event.metaKey : event.ctrlKey)) {
event.preventDefault();
save(event);
return false;
}
});
Sinceramente, me gustaría que las aplicaciones web no anulen mis teclas de acceso directo predeterminadas. Ctrl+ Sya hace algo en los navegadores. Tener ese cambio abruptamente dependiendo del sitio que estoy viendo es disruptivo y frustrante, sin mencionar que a menudo tiene errores. He tenido sitios secuestrados Ctrl+ Tabporque se veía igual que Ctrl+ I, arruinando mi trabajo en el sitio y evitando que cambie de pestañas como de costumbre.
Si desea teclas de acceso directo, use el accesskey
atributo No rompa la funcionalidad existente del navegador.
@Eevee: a medida que el navegador se convierte en el hogar para una funcionalidad cada vez más rica y comienza a reemplazar las aplicaciones de escritorio, simplemente no será una opción para renunciar al uso de atajos de teclado. El rico e intuitivo conjunto de comandos de teclado de Gmail fue instrumental en mi disposición a abandonar Outlook. Los atajos de teclado en Todoist, Google Reader y Google Calendar hacen que mi vida sea mucho, mucho más fácil a diario.
Los desarrolladores definitivamente deben tener cuidado de no anular las pulsaciones de teclas que ya tienen un significado en el navegador. Por ejemplo, el cuadro de texto WMD en el que estoy escribiendo interpreta inexplicablemente Ctrl+ Delcomo "Blockquote" en lugar de "eliminar palabra hacia adelante". Tengo curiosidad por saber si hay una lista estándar en algún lugar de accesos directos "seguros para el navegador" que los desarrolladores del sitio puedan usar y que los navegadores se comprometan a mantenerse alejados en futuras versiones.
$(document).keydown(function(e) {
if ((e.key == 's' || e.key == 'S' ) && (e.ctrlKey || e.metaKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Try pressing ctrl+s somewhere.
Esta es una versión actualizada de la respuesta de @ AlanBellows, reemplazada which
por key
. También funciona incluso con la falla de la tecla mayúscula de Chrome (donde si presiona Ctrl+ Senvía S mayúscula en lugar de s). Funciona en todos los navegadores modernos.
Esta fue mi solución, que es mucho más fácil de leer que otras sugerencias aquí, puede incluir fácilmente otras combinaciones de teclas y se ha probado en IE, Chrome y Firefox:
$(window).keydown(function(evt) {
var key = String.fromCharCode(evt.keyCode);
//ctrl+s
if (key.toLowerCase() === "s" && evt.ctrlKey) {
fnToRun();
evt.preventDefault(true);
return false;
}
return true;
});
String.fromCharCode
. Aunque, las Mac no tienen una clave de control. Pruebe la tecla de comando con evt.metaKey
. Vuelve true
para Cmd en Mac y Win en Windows.
Me gusta este pequeño complemento . Sin embargo, necesita un poco más de amistad entre navegadores.
Esto debería funcionar (adaptado de https://stackoverflow.com/a/8285722/388902 ).
var ctrl_down = false;
var ctrl_key = 17;
var s_key = 83;
$(document).keydown(function(e) {
if (e.keyCode == ctrl_key) ctrl_down = true;
}).keyup(function(e) {
if (e.keyCode == ctrl_key) ctrl_down = false;
});
$(document).keydown(function(e) {
if (ctrl_down && (e.keyCode == s_key)) {
alert('Ctrl-s pressed');
// Your code
return false;
}
});
ejemplo:
shortcut.add("Ctrl+c",function() {
alert('Ok...');
}
,{
'type':'keydown',
'propagate':false,
'target':document
});
uso
<script type="text/javascript" src="js/shortcut.js"></script>
Enlace para descargar: http://www.openjs.com/scripts/events/keyboard_shortcuts/#
Para la respuesta de Alan Bellows:! (E.altKey) agregado para usuarios que usan AltGral escribir (por ejemplo, Polonia). Sin esta presión, AltGr+ Sdará el mismo resultado que Ctrl+S
$(document).keydown(function(e) {
if ((e.which == '115' || e.which == '83' ) && (e.ctrlKey || e.metaKey) && !(e.altKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true; });
Este complemento hecho por mí puede ser útil.
Puede usar este complemento, debe proporcionar los códigos clave y la función para ejecutarse de esta manera
simulatorControl([17,83], function(){
console.log('You have pressed Ctrl+Z');
});
En el código he mostrado cómo realizar para Ctrl+ S. Obtendrá documentación detallada en el enlace. El complemento está en la sección de código JavaScript de mi lápiz en Codepen.
Resolví mi problema en IE , usando un alert("With a message")
para evitar el comportamiento predeterminado:
window.addEventListener("keydown", function (e) {
if(e.ctrlKey || e.metaKey){
e.preventDefault(); //Good browsers
if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) { //hack for ie
alert("Please, use the print button located on the top bar");
return;
}
}
});