Mostrando entradas con la etiqueta javascript. Mostrar todas las entradas
Mostrando entradas con la etiqueta javascript. Mostrar todas las entradas

Tips SQLeros: KeyCodes en JavaScript


Aquí muestro una tabla con los códigos que tienen cada tecla del teclado cuando la pulsamos. Esto nos sirve cuando queremos programar una función en nuestra página que responde a una determinada tecla para realizar una determinada acción:
Los los KeyCodes de los eventos de Windows.
Keyboard
key Pressed
IE JavaScript
Key Code value
Firefox JavaScript
Key Code value
backspace88
tab99
enter1313
shift1616
ctrl1717
alt1818
pause/break1919
caps lock2020
escape2727
page up3333
Space3232
page down3434
end3535
home3636
arrow left3737
arrow up3838
arrow right3939
arrow down4040
print screen4444
insert4545
delete4646
04848
14949
25050
35151
45252
55353
65454
75555
85656
95757
a6565
b6666
c6767
d6868
e6969
f7070
g7171
h7272
i7373
j7474
k7575
l7676
m7777
n7878
o7979
p8080
q8181
r8282
s8383
t8484
u8585
v8686
w8787
x8888
y8989
z9090
left window key9191
right window key9292
select key9393
numpad 09696
numpad 19797
numpad 29898
numpad 39999
numpad 4100100
numpad 5101101
numpad 6102102
numpad 7103103
numpad 8104104
numpad 9105105
multiply106106
add107107
subtract109109
decimal point110110
divide111111
f1112112
f2113113
f3114114
f4115115
f5116116
f6117117
f7118118
f8119119
f9120120
f10121121
f11122122
f12123123
num lock144144
scroll lock145145
My Computer (multimedia keyboard)182182
My Calculator (multimedia keyboard)183183
semi-colon186186
equal sign187107
comma188188
dash189189
period190190
forward slash191191
open bracket219219
back slash220220
close bracket221221
single quote222222

Espero les sirva!

Tips SQLeros: Validar sólo números con JQuery

Bueno mis estimados lectores les comparto un código para poder validar en la entrada de datos de un control input text, que solo acepte números y púntos. En el document ready de jquery agregan la siguiente linea... :D


            //Validar las cajas de texto...
            $('input[type=text]').keypress(function (e) {
                var tecla = document.all ? tecla = e.keyCode : tecla = e.which;
                return ((tecla > 47 && tecla < 58) || tecla == 46);
            });
Con esto todas las cajas de texto, sólo aceptaran como entrada números y puntos. Digo puntos porque puedes poner más de un punto... Pero el como resolverlo, se los dejo de tarea. Si les da pereza tratar de hacerlo ustedes mismos. Pueden probar esto.

Saludos!

Tip SQLero: Obtener un valor de la queryString

Bueno SQLeros, les dejo un código para obtener el QueryString desde javascript, espero les sea de utilidad...


function getQuerystring(key, default_)
{
  if (default_==null) default_="";
  key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
  var qs = regex.exec(window.location.href);
  if(qs == null)
    return default_;
  else
    return qs[1];
}

Y la ocupan de la siguiente manera... =)

digamos que tienen una url así: http://sqleros.com.ar/cosas.php?user=rammsito, el metodo quedaría de esta manera:

var user = getQuerystring("user");

Y el la variable user tendrá el valor de rammsito!

Saludos!!

Vanadium: Validar formularios más fácil imposible


Vanadium es un plugin para jQuery que permite validar formularios de manera sencilla y con pocas lineas de código. Permite validar campos obligatorios, numéricos, email, entre otros.
Validar formularios es muy importante en las páginas para prevenir el ingreso de datos inválidos sin el formato adecuado. Obviamente estas validaciones deben estar acompañadas de una validación en el lado del servidor para tener una doble protección. Entonces Vanadium se encarga del proceso de validar formularios de manera sencilla y con una sintaxis muy sencilla de utilizar.
vanadium

Arrays en Javascript: la diferencia entre [ ] y { }


Una duda muy frecuente en el uso de Javascript es cuándo es necesario usar llaves o corchetes al trabajar con arrays.
Los corchetes se usan para series que poseen valores simples, mientras que las llaves son utilizadas para las series en que hay distintos objetos y propiedades con diferentes valores. Este último caso es bastante similar al sistema de PHP.
De todas formas debemos tener en claro que en JS por convención, las llaves definen objetos y no arrays. Veamos un par de ejemplos:

Diferencia entre [ ] y { } para arrays en Javascript

Ejemplo del uso de corchetes “[ ]”

//examples
var answers = ['yes','no','maybe'];
var names = ['David','Kristina','Charlie','Angela'];

Ejemplo del uso de llaves “{ }”

//example - random array
var programmer = { 'name':'David Walsh', 'url':'http://davidwalsh.name', 'girl':'Kristina'}

//example - used for an object’s properties

var Element.implement({
getText: function(){
return this.get('text');
}
});

¿Que es lo que hace: jQuery.noConflict()?


De vez en cuando me gusta leer el código de alguna buena librería para descubrir cosas interesantes. El código de jQuery es de esos que contiene un buen número de detalles de los que se puede aprender bastante. Es un código atractivo y más sencillo de seguir de lo que podría imaginarse.
Hoy, tras una conversación reciente, me quiero centrar en la implementación de la función noConflict()

El problema

Ya desde su versión 1.0, John Resig -creador de jQuery- tuvo muy clara una idea en la arquitectura de la librería: Causar la mínima polución de nombres posible. ¿Por qué? Por aquel entonces, la librería más popular -PrototypeJS- había seguido el camino de crear las funciones globales que creyó necesarias y de añadir propiedades y métodos a los objetos nativos de Javascript. Entre esas funciones globales, lo que más llamaba la atención era el uso de alias como $o $H o $F. $ es un nombre muy corto que enseguida se hizo popular. Claro, otras librerías decidieron usar ese mismo alias. Luego, cuando los desarrolladores-usuarios querían incluir en su página un determinado elemento hecho con una librería y otro hecho con otra distinta... Colisión de nombres y problemas sin fin.
Pero claro, por otra parte el alias $ es realmente apetecible por su comodidad. Así que en jQuery, buscando dar a sus usuarios la mayor flexibilidad posible para utilizar su librería junto a otras, se decidió usar el alias pero a la vez proporcionar un medio de liberar ese alias, la función noConflict().

Uso de noConflict()

El uso de noConflict() es sencillo. Cargamos jQuery, lo que define el alias $. Luego usamos noConflict() y eso libera el alias, dejando disponible el que hubiera antes en caso de que lo hubiera.
No hay mucho más que decir, más que nada porque ya está dicho en muchos sitios. Incluso en la propia documentaciónoficial de jQuery.

Pero, ¿cómo funciona?

En realidad es bastante sencillo. Todo se basa en el estricto seguimiento por parte de los desarrolladores del principio de encapsulación de alcance. Veámoslo directamente sobre el código. Lo que sigue es el código de jQuery 1.4.4. pero sólo las partes implicadas, claro:
(function( window, undefined ) {

    // Use the correct document accordingly with window argument (sandbox)
    var document = window.document;
    var jQuery = (function() {
        // Define a local copy of jQuery
        var jQuery = function( selector, context ) {
            // The jQuery object is actually just the init constructor 'enhanced'
            return new jQuery.fn.init( selector, context );
        }

        // Map over jQuery in case of overwrite
        _jQuery = window.jQuery
        // Map over the $ in case of overwrite
        _$ = window.$

        jQuery.fn = jQuery.prototype = {
            // The current version of jQuery being used
            jquery: "1.4.4"
        };
        jQuery.extend = jQuery.fn.extend = function() {
            // ...
        };

        jQuery.extend({
            noConflict: function( deep ) {
                window.$ = _$;
                if ( deep ) {
                    window.jQuery = _jQuery;
                }
                return jQuery;
            }
        });
        // Expose jQuery to the global object
        return (window.jQuery = window.$ = jQuery);
    })();
})(window);
Lo primero es que todo el código de la librería está contenido dentro de una función anónima a la que se llama de forma inmediata, recibiendo los valores de window y de undefined. Con esto lo que se logra es que, si seguimos la recomendable práctica de declarar nuestras variables localmente en el entorno que corresponde (usando var) evitaremos causar cualquier conflicto en el alcance global del intérprete. El recibir undefined se hace con un objetivo simétrico: evitar recibir valores de undefined que vengan alterados por otros scripts. window se recibe para obtener una referencia local (más rápido) y localizar la referencia al entorno global en 1 único sitio ( ver explicación en el comentario más abajo )
Una vez nos encontramos en ese entorno, se declara una variable llamada jQuery. Es importante notar que esta variable es local, vive únicamente dentro de este alcance. Y no va a salir de ahí. Definimos ahí un nuevo alcance y dentro de él es donde se va a desarrollar todo el contenido de jQuery. De hecho, es en ese nuevo alcance donde se define otrajQuery local y sobre ella se trabaja, añadiéndole todas las funciones que usamos habitualmente.
En ese mismo alcance donde está definiendo jQuery, se da el primer paso necesario para el funcionamiento denoConflict(): Se captura el (posible) valor existente de $. Fijémonos porque es interesante:
// Map over the $ in case of overwrite
_$ = window.$
Para acceder al $ global, lo hacemos explícitamente a través de window. Ah, y lo mismo se hace con el propio nombrejQuery. Bien, ambos valores se guardan creando sobre ellos una closure. Ahí estarán disponibles para cuando los necesitemos.
Tras crear todas las funciones y objetos necesarios, la forma de hacer disponibles tanto jQuery como $ en el alcance global, no es simplemente devolver los objetos in más, sino que se exponen explícitamente sobre el objeto window:
return (window.jQuery = window.$ = jQuery);
Ahora, después de haber cargado y construido jQuery, es cuando podemos llamar a noConflict(). ¿Qué es lo que ocurre cuando lo hacemos? Sencillo:
            noConflict: function( deep ) {
                window.$ = _$;
                if ( deep ) {
                    window.jQuery = _jQuery;
                }
                return jQuery;
            }
Por una parte, volvemos a exponer como window.$ el objeto que habíamos capturado inicialmente en _$. Si lo pedimos, se hace también lo mismo con el nombre jQuery. La liberación de $ es interesante para cualquier librería que lo use, la de jQuery permite la convivencia con otras versiones de la propia librería. Además, por si el usuario lo prefiere devolvemos también el objeto jQuery.

Ejemplo

Si vemos el siguiente ejemplo:
<!DOCTYPE HTML >
<html>
<head>
<title>Muchas jQueries!</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js" ></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" ></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" ></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" ></script>
<script type="text/javascript">
    var jqs = {};
    jqs.jq144 = jQuery.noConflict(true);
    jqs.jq143 = jQuery.noConflict(true);
    jqs.jq142 = jQuery.noConflict(true);
    jqs.jq141 = jQuery.noConflict(true);

    jqs.jq144(function($) {
        $("#out").html("141: " + jqs.jq141().jquery + "<br/>142: " + jqs.jq142().jquery +"<br/>143: " + jqs.jq143().jquery +"<br/>144: " + jqs.jq144().jquery );
    });
</script>
</head>
<body>
<div id="out"></div>
</body>
</html>
Tras haber cargado las 4 versiones de jQuery, lo que tenemos es algo como esto:
jQuery {
    version 1.4.4
    closure ( _jQuery = jQuery {
        version 1.4.3
        closure ( _jQuery = jQuery {
            version 1.4.2
            closure ( _jQuery = jQuery {
                version 1.4.1
            })
        })
    })
}
Con la primera llamada a jQuery.noConflict() lo que hacemos es devolver el actual jQuery y asignar el anterior (_jQuery) a window.jQuery. Así queda nuestra estructura:
    jQuery {
        version 1.4.3
        closure ( _jQuery = jQuery {
            version 1.4.2
            closure ( _jQuery = jQuery {
                version 1.4.1
            })
        })
    }
Algo similar se va haciendo con $. Cuando llamamos por segunda vez... Realmente estamos llamando alnoConflict() del objeto que está ahora en jQuery, que es la versión 1.4.3. Es decir, no es -aunque lo parezca- la misma llamada que antes. Se llama igual, pero es una función de otro objeto.

Conclusiones

jQuery utiliza una estructura muy definida para evitar por todos los medios crear conflictos de colisiones con otras librerías o incluso con otras versiones de ella misma. Además, proporciona la función noConflict() como herramienta fundamental para solucionar esas colisiones.