Chalalo Land

Tecnologías ASP.NET y un poco Más

Contacto


 Si quierer cooperar, yo feliz, muy agradecido :)

De donde me Visitan?

Locations of visitors to this page

Generic Content

Si te gustaron los articulos, y te animas te estaría muy agradecido!


Recent Posts

Tags

Community

Blogs de MVP

Amigos Geeks

Blogs Imperdibles

GODS

Archives

Email Notifications

[jQuery] Utilizar Shortcut Keys en tus páginas Web, Ejemplo para grabar y bloquear pantalla.

Hola que tal?, este tip surgió de la necesidad de “pseudo bloquear” una aplicación web mediante el uso de una combinación de teclas, sin embargo, este ejemplo va un poco más allá y veremos también como utilizar los shortcut para que con Ctrl + S podamos grabar asíncronamente en la base de datos. Entonces, hay dos ideas principales de este post, bloquear y grabar.

Entonces, vamos a utilizar un formulario bastante sencillo, que tiene un textarea y un div con id mensaje para mostrar el aviso sobre el estado de la grabación del registro.

image

El plugin que vamos a utilizar se llama hotkeys y está creado por J.Resig, creado de jQuery, pueden verlo en:
https://github.com/jeresig/jquery.hotkeys

Primer Caso, Grabar con Ctrl +  S

La idea es que al estar escribiendo un texto, con Ctrl + S podamos guardar, para mi ejemplo, son notas independientes que se irán grabando, es decir, cada vez que se graba, se crea un nuevo registro.Para ambos ejemplos (grabar y bloquear) vamos a agregar las librerías:

<script src="Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>

<script src="Scripts/jquery.hotkeys.min.js" type="text/javascript"></script>

<script src="Scripts/modal.js" type="text/javascript"></script>

<script src="Scripts/bloqueo.ejemplo.js" type="text/javascript"></script>

<link href="css/estilos.css" rel="stylesheet" type="text/css" />

En la librería bloqueo.ejemplo.js está el código para asociar la combinación de teclas a la funcionalidad:

    $(document).bind('keydown', 'ctrl+s', function (evt) { 

        guardaTexto();

        return false;

    });

La simpleza es increíble, le indicamos que combinación de teclas va a ser la que gatille el evento, luego invocamos a la función guardaTexto();

function guardaTexto() {

        $("#mensaje").html("<strong>Guardando...</strong>");

        var texto = $("#tx_nota").val();

        $.ajax({

            type: "POST",

            url: "TextoWS.asmx/guardaNota",

            data: "{ texto:'" + texto + "' }",

            contentType: "application/json; charset=utf-8",

            dataType: "json",

            success: function () {

                $("#mensaje").html("Registro Grabado...");

 

            },

            failure: function (msg) {

                alert(msg);

            }

 

        });

    }

Como se puede ver, me estoy conectado a un webService, que el cual siemplemente guarda el texto:

   <WebMethod()> _

    Public Sub guardaNota(texto As String)

        Dim contexto As New ContextoDataContext

        Dim registro As New nota With {.nota = texto, .fecha = Date.Now}

        contexto.notas.InsertOnSubmit(registro)

        contexto.SubmitChanges()

    End Sub

El ejemplo utiliza LinQ y el contexto es:

image

De todas maneras, al final del post, se adjunta el demo para que lo descargues:

A Probarlo! Sonrisa 

Segundo Caso, Bloquear la pantalla.

En este caso no hay llamada asíncrona, si que no debemos tratar de bloquear la pantalla para que no se puede seguir escribiendo, para esto vamos a configurar que cuando se presione Ctrl + K se bloquee la pantalla y al volver a presionar estas teclas,  se desbloquee.

image

En vez de elegir una ventana Modal de los plugins conocidos, elegí el ejemplo de Ribosomatic, de paso excelente blog:
http://www.ribosomatic.com/articulos/ventana-modal-con-jquery-paso-a-paso/

Ya que este ejemplo no tiene la opción explícita de cerrar la ventana, entonces, nos sirve para crear el efecto de bloquear. Dentro del archivo modal.js encontraremos el código de la ventana.

Veamos el código del bloqueo:

$(document).bind('keydown', 'ctrl+k', function (evt) {

        if (bloqueo_pantalla == 0) {

            $("#mensaje").focus();

            mostrar_msg_bloqueo();

 

            bloqueo_pantalla = 1;

            return false;

        } else {

            closeModal();

            bloqueo_pantalla = 0;

            return false;

        }

 

    });

Voy a mantener la variable bloqueo_pantalla para hacer el cambio de bloqueo a desbloqueo cada vez que se presione Ctrl + K. Algo importante es sacar el foco desde un campo input, por que si al momento de presionar la ctrl+k el cursor está sobre, por ejemplo, una caja de texto, se podrá seguir escribiendo, es por eso que enviamos el foco a un DIV, en este caso, mensaje.

También es necesario, por lo menos para mi Sonrisa,  bloquear la tecla F5, por lo que voy a agregar otro código:

   $("body").keydown(function () {

        var tecla = window.event.keyCode;

        if (tecla == 116) {

            event.keyCode = 0;

            event.returnValue = false;

        }

 

    });

El código del F5 es el 116, y anulamos el evento.

A Probarlo! Sonrisa

 

 

Como vez, el efecto es el deseado, puedes cambiar el contenido de la ventana modal en el archivo modal.js.

Te dejo el código completo para que lo descargues:

Espero que te sirva!!
Nos vemos!!

Posted: 16/4/2011 21:55 por Gonzalo Perez | con 7 comment(s)
Archivado en: ,,
Comparte este post:

Comentarios

Pablo Hormazabal ha opinado:

cambio de imagen

# April 18, 2011 7:16 PM

Sergio ha opinado:

Gonzalo,está funcion sirve en el caso que uno quiera tambien adicionar  ambos metodos, vale decir, botón más Ctrl+S

# April 24, 2011 6:31 AM

Sergio ha opinado:

Gonzalo,está funcion sirve en el caso que uno quiera tambien adicionar  ambos metodos, vale decir, botón más Ctrl+S

# April 24, 2011 6:32 AM

Chalalo ha opinado:

Si, si se puede, de hecho si bajas el ejemplo esta implementado de la misma manera.

# April 24, 2011 8:40 PM

jesus s ha opinado:

granejemplo gonzalo espero poder implementarlo con exito en unpunto de venta eb que estamos desarrollado.saludos

# May 18, 2011 6:42 PM

Gonzalo Perez ha opinado:

Jesus,

Espero que te sirva :)

# May 18, 2011 6:59 PM

Jorge ha opinado:

Lo he estado probando y en firefox no me detecta para la tecla backspace == 8 ... que creen que se deba esto

# June 29, 2011 7:52 PM