Maestros del Web


Estás en Inicio / Editorial / Javascript

23.02.2006

Formularios y enlaces dirigidos a ventanas

A través del presente artículo aprenderemos la correcta utilización de las ventanas popup, pues la forma que considerabamos correcta, según algunos artículos publicados no lo es del todo.

Incluso se afirma que son formas semánticamente correctas, no voy a juzgar si está bien o mal empleado el uso de esas palabras, tan solo voy a incluír un enlace a un artículo de wikipedia, sobre “Semántica”.

En principio podría decir simplemente que la forma correcta es la que se puede ver en un mensaje de los foros del web que yo mismo escribí:. Abrir enlace en un popup (me refiero a la primera de esas formas), pero he notado que siguen existiendo dudas, tal como se puede deducir de este otro mensaje: Hay que rectificar las FAQS

Existen varias páginas en donde se explica esa forma de enlazar:

Y… ¿Por qué afirmo que no es correcto?

Para iniciar daré una explicación sencilla basada justamente en la semántica. Si usamos un enlace o vínculo a otra página, es evidente que pensamos que ese vínculo se puede realizar, pero el usar la sentencia return false (asociado al evento click de ese enlace) estamos dando la orden de cancelar el enlace o vínculo. En resumen, usando un enlace queremos expresar “enlace a”, y usando return false estamos expresando “no enlace”.

Podríamos pensar entonces que no debería existir ese tipo de cancelación, pero la verdadera razón de existencia es para confirmación o validación, tal como explicaré más adelante.

Describiré ahora la forma correcta, ayudándome de la similitud entre enlaces y formularios. La verdad es que son muy pocas las veces que se plantea el envío de un formulario hacia un popup, pero es posible, y está registrado en las FAQs javascript del mismo foro: Submit a una ventana emergente (popup), que también escribí. Además he encontrado un mensaje precedente: Un consejo, una idea, por favor.

Forma correcta

El enlace a un popup se debe hacer como cualquier enlace, usando el atributo href…, y para enviar formularios se utiliza el atributo action (en el primer caso se usa la etiqueta “a” y en el segundo “form”).

Para que el soporte destino (tanto de los enlaces como de los formularios) sea otra ventana, debe definirse el atributo target. Existen nombres estándar de algunas ventanas como _self, _blank, _top, _parent. Pero también se puede dar un nombre arbitrario, y esos es lo que debemos hacer.

Y ahora viene lo más importante… “el popup”…

Tanto formularios como enlaces, ofrecen un sistema para confirmar/cancelar la ejecución y que son muy parecidos. Usando un valor lógico con el evento asociado: submit para formularios y click para enlaces, de manera que se puede confirmar la acción asignando el valor lógico true, y cancelarla con false.

Dicho esto, voy a mostrar 2 formas correctas de formulario y enlace (aún sin usar ventanas):

Enlace:
<a
	href="destino.html"
	onclick="return confirm('Desea enlazar con:\n' + this.href)">
	...
</a>
Formulario:
<form
	action="destino.html"
	onsubmit="return confirm('Desea enviar formulario a:\n' + this.action)">
	...
</form>

Nótese la similitud de los dos ejemplos… y si a ambos le añadimos un atributo target arbitrario: target=”popup”, seguirá teniendo la misma similitud: un enlace que se confirma (también podría validarse) con una función asociada al manejador de evento onclick, y un formulario que igualmente se confirma con su evento asociado (submit).

La verdad es que la confirmación la podemos omitir y en su lugar, ¿qué pasaría si abriésemos una ventana
en blanco, de nombre popup…? Recuérdese que hemos puesto un atributo target=”popup”…

Enlace:
<a
	href="destino.html"
	target="popup"
	onclick="window.open('', 'popup', 'width = 200, height = 100')">
	...
</a>

Formulario:
<form
	action="destino.html"
	target="popup"
	onsubmit="window.open('', 'popup', 'width = 200, height = 100')">
	...
</form>

Cuando se activa el enlace (click), antes de enlazar se chequea el evento asociado por si hubiese que validar/confirmar, pero en vez de eso está la orden de abrir la ventana popup… sin URL. Entonces se abre esa ventana y luego se enlaza, pero al tener definido el atributo target, ese enlace se hace a una ventana que debe llamarse popup, y como es parte del juego de ventanas activas, allí se realiza. Con el formulario el razonamiento es el mismo.

Una última observación

Otra cosa que no hemos considerado es el bloqueo de ventanas emergentes desde la configuración de los navegadores. Si bien en estos casos algunos navegadores abren una ventana nueva, la verdad es que no debería ser así…

Con los siguientes códigos para enlazar:

<a
	href="index.php"
	target="v"
	onclick="window.open('', 'v', 'width=300,height=200');" >
	...
</a>

<a
	href="index.php"
	target="v"
	onclick="window.open(this.href, this.target, 'width=300,height=200'); return false" >
	...
</a>

probados en los navegadores: “explorer”, “mozilla” y “opera”, se han abierto correctamente las ventanas en los dos primeros, pero en el tercero la ventana fue bloqueada con ambos códigos, pero solo a enlazado en la ventana activa el código sin cancelación (primero). Supongo que este último comportamiento es el correcto cuando se bloquean los popups (lamento no disponer de todos los navegadores para hacer pruebas).

Y teniendo javascript desactivado (otra de las posibilidades que ofrecen los navegadores), ambos códigos
también funcionan correctamente.

Califica esta nota:

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (4 votos, promedio: 3 de 5)
Loading ... Loading ...

Sobre el autor

Pepe Molina
Se desarrolla como webmaster de caricatos.net, autor de varios artículos y manuales sobre diseño y desarrollo web.

Si eres nuevo en Maestros del Web y te agradan nuestras publicaciones, te invitamos a suscribirte a nuestro Feed.

Sindícanos en: Google Reader, Bloglines, My Yahoo o My MSN | ¿Qué es el Feed?

Comentarios

13 comentarios en total.

  1. Andrés Fernández 19.10.2006 - 17:09 - #

    Los enlaces para abrir popups escritos de esta manera no funcionan correctamente en explorer 5

    // http://www.disegnocentell.com.ar //

  2. Victor Pereyra 23.10.2006 - 10:57 - #

    Tampoco funcionan en Mozilla, alguien conoce algun enlace donde se pueda ver alguna forma de que funcione en IE y Mozilla?

    // http://www.victorpereyra.com //

  3. caricatos 12.11.2006 - 11:52 - #

    Hola:

    Sobre explorer 5, no puedo responder porque no lo tengo instalado, pero no se trata de código que “no comprenda” y me extraña que no funcione… de lo que estoy seguro es que en mozilla funciona correctamente, tanto los enlaces como los formularios… tal vez haya algún pequeño error en el código.

    Saludos :arriba:

  4. María Cristina Faleroni 28.11.2006 - 17:13 - #

    Honestamente lo que estoy buscando es un código que pueda crear un espacio como el que estoy utilizando en este momento para dejar mi comentario, sería probable que pueda obtenerlo?. de ser así mi E.Mail es: arte-cristinafaleroni@hotmail.com

  5. herald 28.11.2006 - 22:54 - #

    Yo necesito una codigo para mandarlo por correo electronico a mis amigos y recibir la informacion que ellos ingresen en mi buzon de correo. Podria alguien ayudarme por favor. mi correo es heraldsanchez@gmail.com

  6. Larenz 21.02.2007 - 20:56 - #

    Estaba buscanco algo parecido, un código que me abriera una popup al momento en que mandaran el formulario. Pues fíjense que yo soy nuevo en esto de códigos html, php, javascript, etc. y lo hice funcionar. Me funcionó en Mozilla e Internet Explorer 6.0.

    Habilité la opción de bloquear las ventanas emergentes en IE6.0 y me las abre, excepto si pongo la opción bloquear todas las ventanas emergentes [que en este caso sería "Nivel de filtro: Alto"], y en Mozilla FireFox me funciona bien.

    Gracias a Dios encontré ésta página porque ya empezaba a preocuparme ya que quería darle un toque más elegante a mi web haciendo que apareciera una ventana emergente en vez de abrirse la “gran ventana”.

    Si quieren que les explique mucho mejor pueden agregarme al msn: sammy.mejia@hotmail.com

  7. Larenz 21.02.2007 - 21:19 - #

    Estaba buscanco algo parecido, un código que me abriera una popup al momento en que mandaran el formulario. Pues fíjense que yo soy nuevo en esto de códigos html, php, javascript, etc. y lo hice funcionar. Me funcionó en Mozilla e Internet Explorer 6.0.

    Habilité la opción de bloquear las ventanas emergentes en IE6.0 y me las abre, excepto si pongo la opción bloquear todas las ventanas emergentes [que en este caso sería "Nivel de filtro: Alto"], y en Mozilla FireFox me funciona bien.

    Gracias a Dios encontré ésta página porque ya empezaba a preocuparme ya que quería darle un toque más elegante a mi web haciendo que apareciera una ventana emergente en vez de abrirse la “gran ventana”.

    Si quieren que les explique mucho mejor pueden agregarme al msn: sammy.mejia@hotmail.com

  8. Gustavo B. 21.01.2008 - 11:04 - #

    El ejemplo me funciona, pero no me pasa las variables del formulario al popup. Como hacer eso?

  9. Gustavo B. 21.01.2008 - 12:10 - #

    esto lo saqué de otra foro y funciona:

    function enviaformulario() {
    win = window.open(”,’myWin’,'toolbars=0′);
    document.myForm.target=’myWin’;
    document.myForm.submit();
    }

  10. Gustavo B. 21.01.2008 - 12:16 - #

    lamentablemente no se ha copiado el html completo en el foro o. Si alguien lo necesita, enviarme un mail a cacobrx@gmail.com

  11. Daniel Diaz 01.07.2008 - 16:59 - #

    Aunque es de hace tiempo la editorial, aca encontré el codigo faltante y lo mejor, funciona con Firefox.

    function enviaformulario() {
    win = window.open(”,’myWin’,'toolbars=0′);
    document.myForm.target=’myWin’;
    document.myForm.submit();
    }

  12. Daniel Diaz 01.07.2008 - 17:00 - #

    vaaa, no copia el codigo completo pero pueden encontrarlo aqui http://www.tutores.org/?codigo=1676&Enviar-formulario-a-ventana-Popup&q=usuario%20y%20contrase%C3%B1%C6%92%C3%B0%C2%B3%C3%B1%E2%80%9A%C3%A2%E2%80%93%E2%80%99a

  13. caricatos 02.07.2008 - 10:16 - #

    Hola:

    Es lamentable que existan tutores ofreciendo un código tan malo como el que muestra el enlace de “Daniel Diaz”… evidentemente el que escribió ese código sabe muy poco de html/javascript… Un error leve es poner onclick con la c mayúscula, pero uno muy grave es asociar a un botón submit una función que finalice con el método submit (redundancia).
    Lo peor de todo es que no se aporta ninguna mejora… como he comentado se trata de todo lo contrario.

    Saludos ;-)

Trackbacks

1 trackbacks en total.

  1. submit en otra pagina - Foros del Web
Deja tu Comentario


Maestros del Web se reserva el derecho de moderación de los comentarios. Evita utilizar palabras soeces, ataques directos, descalificativos, insultos, de lo contrario tu comentario será eliminado.


Boletín

Agrega nuestro feed a  Netvibes
wikio Add to Technorati Favorites

-


Maestros del Web es el punto de encuentro para los entusiastas de la red.

Creative Commons by-nc-sa 3.0 | Política de Privacidad | CMS: Wordpress