Como evitar que el navegador ejecute sus funciones por defecto [Jquery]

Iniciado por :ohk<any>, 26 Julio 2015, 16:58 PM

0 Miembros y 1 Visitante están viendo este tema.

:ohk<any>

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:

Código (javascript) [Seleccionar]


        $(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
Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.

MinusFour

Yo creo que tienes que usar stopPropagation(), porque preventDefault() es para el evento que estás escuchando (keyup).

:ohk<any>

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
Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.

MinusFour

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:

Código (javascript) [Seleccionar]

    eventCombo.add(function () {
        console.log('Ctrl + S called');
    }, 17, 83);

    $(document).keydown(function (e) {
        eventCombo.handleKey(e.keyCode);
        e.preventDefault();
        e.stopPropagation();
    });

_Enko

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.