Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: :ohk<any> en 26 Julio 2015, 16:58 pm



Título: Como evitar que el navegador ejecute sus funciones por defecto [Jquery]
Publicado por: :ohk<any> en 26 Julio 2015, 16:58 pm
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
  1.  
  2.        $(document).keyup(function(e){
  3.        if(e.which == 17) isCtrl=false;
  4.        }).keydown(function (e){
  5.        if(e.which == 17) isCtrl=true;
  6.                // Ctrl + S
  7.        if(e.which == 83 && isCtrl)
  8.        {
  9.        e.preventDefault();
  10.        alert("Ha presionado el Ctrl + S");
  11.        }
  12.        });
  13.  

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


Título: Re: Como evitar que el navegador ejecute sus funciones por defecto [Jquery]
Publicado por: MinusFour en 26 Julio 2015, 17:07 pm
Yo creo que tienes que usar stopPropagation(), porque preventDefault() es para el evento que estás escuchando (keyup).


Título: Re: Como evitar que el navegador ejecute sus funciones por defecto [Jquery]
Publicado por: :ohk<any> en 26 Julio 2015, 17:12 pm
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


Título: Re: Como evitar que el navegador ejecute sus funciones por defecto [Jquery]
Publicado por: MinusFour en 26 Julio 2015, 18:00 pm
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
  1.    eventCombo.add(function () {
  2.        console.log('Ctrl + S called');
  3.    }, 17, 83);
  4.  
  5.    $(document).keydown(function (e) {
  6.        eventCombo.handleKey(e.keyCode);
  7.        e.preventDefault();
  8.        e.stopPropagation();
  9.    });


Título: Re: Como evitar que el navegador ejecute sus funciones por defecto [Jquery]
Publicado por: _Enko en 27 Julio 2015, 18:55 pm
Este es el script que uso para cancelar el ENTER en los inputs de formularios.

Código:
 <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:
Código:
$(document).on("keypress", ".clase-input", function(e) {
     if (e.which == 13) {
         //evento al presionar enter estando dentro de .clase-input

     }
});
Saludos.