Buenas gente,
Estoy intentando utilizar un hotkey con jquery que funciona sin problemas, pero cuando hay una diferencia de compatibilidad de hotkeys tengo un gran problema.
Por ejemplo, le doy un hotkey al (Shift+Ctrol+S) para que pase algo y no da problemas.
Pero cuando le hago por ejemplo al (Ctrl+S) el navegador dispara la opción de guardar pagina y al mismo tiempo ejecuta la funcion que adiciono.
Y quisiera saber como puedo evitar que el navegador ejecute automáticamente su función por defecto.
No esta por demás decirles que la funcion .preventDefault() ya la he utilizado sin resultados positivos.
Mi código:
$(document).keyup(function(e){
if(e.which == 17) isCtrl=false;
}).keydown(function (e){
if(e.which == 17) isCtrl=true;
// Ctrl + S
if(e.which == 83 && isCtrl)
{
e.preventDefault();
alert("Ha presionado el Ctrl + S");
}
});
En el caso explicito de mi código, cuando presiono Ctrl+S, me sale la alerta como debe ser, pasada la alerta se abre la opción del navegador.
Alguna idea?
Saludos
Yo creo que tienes que usar stopPropagation(), porque preventDefault() es para el evento que estás escuchando (keyup).
Gracias, lo acabo de probar y te digo que sigo con los mismos resultados, se dispara mi alert y luego la funcion del navegador.
Alguna otra idea? O tendre que limitarme a usar hotkeys que no esten ocupados por el navegador?
Saludos
Es raro, a mi me funciona. Excepto para algunas combinaciones (que son manejadas por tu SO y no el navegador). Aquí te dejo mi jsFiddle:
http://jsfiddle.net/8zqp6wjh/1/
Lo importante es:
eventCombo.add(function () {
console.log('Ctrl + S called');
}, 17, 83);
$(document).keydown(function (e) {
eventCombo.handleKey(e.keyCode);
e.preventDefault();
e.stopPropagation();
});
Este es el script que uso para cancelar el ENTER en los inputs de formularios.
<script type="text/javascript">
function stopRKey(evt) {
var evt = (evt) ? evt : ((event) ? event : null);
var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
if ((evt.keyCode == 13) && ((node.type=="text") || (node.type=="email") || (node.type=="radio") || (node.type=="checkbox")) ) {return false;}
}
document.onkeypress = stopRKey;
</script>
Si estas en un text, email, radio, checkbox y el usuario presiona ENTER, no se va mandar el submit.
Luego lo capturo con jquery:
$(document).on("keypress", ".clase-input", function(e) {
if (e.which == 13) {
//evento al presionar enter estando dentro de .clase-input
}
});
Saludos.