Abrir nuevas ventanas no es buena idea. Usar target="_blank" tampoco lo es. Pero usar scripts mal pensados y peor escritos para abrir enlaces en ventanas popup es lo peor de lo peor.
Así que, si a pesar de las advertencias de los libros sagrados vas a abrir un popup usando javascript, muestra un poco de respeto por tus usuarios y hazlo (algo) bien.
Continúa leyendo Ventanas popup con jQuery y un poco de respeto
Hoy vamos a parir un par de iteradores un poco raritos. El primero de ellos infinito. El segundo, aleatorio. Y luego los combinaremos con `setInterval`. Porque tú lo vales y porque nos serán útiles para presentar información periódicamente. Continúa leyendo Intervalos e iteradores infinitos
Un mensaje de Carlos Campderrós en javaEScript, la lista de correo, me descubre un bug una peculiaridad de JScript (la implementación de ECMAScript que padecemos en Internet Explorer) con el cual no recuerdo haberme enfrentado. En pocas palabras: el método `substr` no da los resultados esperados cuanto se utiliza un valor negativo como primer parámetro. Continúa leyendo String.substr: bug en Internet Explorer y solución
ECMAScript (javascript para los amigos) es un lenguaje dinámicamente tipado. Pero tipos, haberlos, haylos. Veamos cómo realizar conversiones explícitas a String, Number y Boolean con unos pocos carácteres menos de lo _usual_. Continúa leyendo Conversión rápida de tipos
¿Alguna vez has cerrado una ventana cuando tenías un formulario a medio rellenar? ¿Has invertido media hora en escribir un email y, por error, has abandonado la página sin enviarlo? Evita a tus usuarios pasar por este trauma –y el de aprender hebreo– usando onbeforeunload. Continúa leyendo onbeforeunload: tiende una mano al usuario
Una closure (cierre) es una función definida dentro del cuerpo de otra. Dentro de ella podemos acceder a las variables definidas dentro de la función padre. Pero en ocasiones, los resultados no son los esperados. Continúa leyendo De closures y valores «inesperados»: el porqué y una solución
Presentamos un repaso en profundidad a los métodos de jQuery relacionados con el trabajo con eventos: asignación, manejo (`this` y `target`), desligado de manejadores, disparo _artificial_ de eventos, atajos y buen humor. Continúa leyendo Eventos en jQuery
Por suerte o por desgracia, en más de una ocasión nos encontramos con que ECMAScript no nos provee de todos los métodos que podemos _llegar a necesitar_ en nuestro trabajo. Uno de los casos flagrantes es el de recortar espacios en blanco al principio y al final de una cadena: ni la especificación ni ninguna de sus implementaciones (JavaScript, JScript) incluyen un método `trim` para eliminar esos espacios de sobra.
Y es razonable, puesto que esta función es sencilla de implementar. Continúa leyendo Eliminar espacios en blanco usando expresiones regulares
Cuando utilizamos operador de asignación (más comunmente conocido como `=`) para asignar un array –o un objeto– ya existente a una variable debemos tener en cuenta que no estamos almacenando una copia del array, sino una referencia al mismo.
Considérese:
var a = [ 1, 2, 3 ];
alert(a); // [ 1, 2, 3 ]
var b = a;
alert(b); // [ 1, 2, 3 ]
b.push(4);
alert(b); // [1, 2, 3, 4 ]
alert(a); // [ 1, 2, 3, 4 ] <-- `a` ha sido modificado indirectamente
Veamos como realizar una copia en lugar de almacenar una referencia. Continúa leyendo Copia de arrays y objetos
Supongamos una linda interfaz en la que algunos elementos no se muestran hasta que el usuario realiza alguna acción. Supongamos que somos hombres de buen corazón y queremos que nuestra aplicación sea accesible sin necesidad de javascript.
1. Si ocultamos esos elementos mediante CSS, quien no tenga javascript no tendrá, jamás de los jamases, acceso a ellos.
2. Si ocultamos los elementos mediante javascript, se producirá algún que otro feo parpadeo (y si son muchos los elementos a ocultar, aumentará el tiempo de proceso).
Veamos cómo podemos evitar ambos problemas con una pequeña combinación de CSS y scripting. Continúa leyendo Ocultar elementos por CSS si y solo si disponemos de javascript