21 de
Diciembre de
2009,
a las 23:10 | Etiquetas: html, javascript
A veces nos surge la necesidad de forzar que un enlace se abra en una ventana nueva o “popup”. El problema es que debemos mantener el HTML válido para que estos enlaces sean seguidos por motores de búsqueda o puedan ser utilizados por navegadores sin Javascript.
En todos los sitios se ve el típico tutorial que dice “… utiliza el window.open() de Javascript …“. Efectivamente, hay que usarlo, pero sin obstruir ni hacer HTML chapucillas.
Vamos a presentar 3 formas de abrir un “popup”, una “mala” y dos mejores.
- Con HTML “guarrete”:
<a href="#"
onclick="window.open('http://davidasorey.net',
'popup1',
'height=800,width=600,resizable=1,scrolling=1')">Enlace 1</a>
Fatal. El destino de este enlace está “falseado”. A veces también nos podemos encontrar algo como:
<a href="javascript:void(0)">
Esta forma de hacer los “popups” puede ser aceptable sólo si explícitamente queremos que este enlace no se siga.
- Un poco mejor, dejando un href correcto:
<a href="http://davidasorey.net"
target="popup2"
onclick="window.open('',
'popup2',
'height=800,width=600,resizable=1,scrolling=1')">Enlace 2</a>
Aquí jugamos con el atributo “target“. El evento “click” abre una ventana “vacía” pero con un identificador “popup2“. Cuando el navegador va a abrir el enlace, ya encuentra una ventana con este identificador y abre el enlace en esta nueva ventana.
Es una mejora, desde luego: el enlace ya es un enlace “real” e indexable.
- Una solución sin Javascript “inline”:
<a class="popup3" href="http://davidasorey.net">Enlace 3</a>
Obviamente, esta es la solución más limpia, pero requiere un poco más de trabajo adicional.
Con jQuery (se puede hacer con cualquier otra librería o “framework”) hay que “capturar” todos los enlaces con la clase “popup3″ y alterar su comportamiento:
$(document).ready(function (d) {
$('a.popup3').click(function (e) {
e.preventDefault();
var href = $(this).attr('href');
window.open(href,
'popup3',
'height=800,width=600,resizable=1,scrolling=1');
});
});
En pocas líneas alteramos el comportamiento de todos los enlaces con la clase ‘popup3‘. Nos ahorramos andar escribiendo el código Javascript en el evento onclick y todo el código y control de este comportamiento está en un sólo punto.
¿Qué versión os gusta más?
21 de
Julio de
2009,
a las 16:07 | Etiquetas: css, diseño, javascript, jquery, programación, prototype
El uso de selectores CSS en los “frameworks” para JavaScript más conocidos ha permitido lo que hace unos años era impensable: los diseñadores entienden el código de los programadores y los programadores pueden comprender el CSS de los diseñadores.
jQuery es especialmente adecuado: no distingue entre selectores “por id” ni selectores por “clase” (Prototype tiene dos funciones diferentes, $() y $$(), para estas tareas).
$('.lateral a.externo').click(function(ev) {
// Código a ejecutar
})
Este sencillo código es fácil de entender y un diseñador al verlo rápidamente intuye que en todos los tags A dentro de la “capa” lateral que tengan la clase externo se hará algo al hacer click.
.lateral a.externo {color: red; padding: 5px; margin: 0;}
Este fragmento de CSS afecta a los mismos elementos que el javascript anterior. Un desarrollador enseguida ve también a qué elementos afecta.
Lo bueno es que si el diseñador y el programador hablan en el mismo lenguaje (selectores CSS), el desarrollo es muy fácil y se puede trabajar en paralelo fácilmente.
08 de
Junio de
2009,
a las 22:40 | Etiquetas: firefox, javascript, opera, safari
15 de
Febrero de
2009,
a las 23:38 | Etiquetas: javascript, jquery, prototype
La aparición de estas librerías o “frameworks” para programar JavaScript han supuesto un ahorro de tiempo importante para los desarrolladores. Ya no hay que estar tan pendiente de las incompatibilidades entre navegadores, simplifican mucho el trabajo con el árbol DOM, etc.
Empecé a trabajar con Prototype un poco por “imposición técnica” y ya me pareció una maravilla el poder abstraerme de los XmlHttpRequest y demás. Desde hace un tiempo estoy empezando a profundizar más en jQuery, y, en mi opinión, me parece más cómodo y sencillo.
- En jQuery los selectores utilizan la sintaxis de CSS y son uniformes, es más claro — p. ej.: $(’#titulo’) ó $(’div.resaltado’) en Prototype serían $(’titulo’) y $$(’div.resaltado’).
- En jQuery las operaciones típicas como ocultar/mostrar un elemento o conjunto de elementos son más sencillas: da igual que nuestro selector nos devuelva un sólo elemento o un conjunto de ellos, el método es el mismo — p. ej.: $(’#titulo’).hide() ó $(’div.resaltado’).hide()
- Generalizando mucho, podemos decir que jQuery es más conciso y Prototype más explícito.