PDA

Ver la Versión Completa : vinculo que no deberia hacer nada......


oracle
19-05-2007, 19:23:06
hola amigos, tengo el siguiente problema:

Estoy generando una tabla con diferentes imagenes con vinculos (eliminar, modificar, etc) que gestionan los diferentes registros de la tabla....El asunto es que deseo que cuando seleccionen en el boton (imagen) eliminar muestre una ventana de confirmacion, he buscado y encontre que debe ser mas o menos asi:

..."<a onClick=javascript:confirmar() href=../pages/Eliminarusuario.php?idusuario=".$cons[user]."><img src=../Images/ElimUsuario.png border=0 alt='Elimina el usuario y todos los registros asociados a el'></a>"...

La funcion confirmar es la siguiente:

<script language="JavaScript" type="text/javascript">
function confirmar()
{
var statusConfirm = confirm("¿Realmente desea eliminar este usuario?");
if (statusConfirm == true)
return true;
else
return false;
}
</script>

Y el asunto es que muestra muy bien el dialogo de ocnfirmacion, pero tanto si lo doy en OK como en Cancelar me elimina el registro igualmente. Quisiera saber donde esta el detalle si lo hay para resolver esto.......

Saludos

lucasarts_18
19-05-2007, 20:11:53
Y el asunto es que muestra muy bien el dialogo de ocnfirmacion, pero tanto si lo doy en OK como en Cancelar me elimina el registro igualmente. Quisiera saber donde esta el detalle si lo hay para resolver esto.......



Pueden ser varias opciones, te day algunas pistas..

El form de tu formulario está apuntando al archivo php que hace la eliminación.
En vez de retornar true o false creo que en la función deberías hacer el action del formulario.
En el javascript de la imagen al parecer le falta algo para determinar una u otra acción.A mí sucedió hace algunos días lo mismo que tu, no recuerdo como lo solucioné, y por ahora no tengo las fuentes como para poder ayudarte.

Pero lo que estoy seguro es que no uso href para direccionarlo a otra página, sino que lo direcciono en la misma función Javascript a traves de:


<script language="JavaScript" type="text/javascript">
function confirmar()
{
var statusConfirm = confirm("¿Realmente desea eliminar este usuario?");
if (statusConfirm == true)
Form1.action = 'elimina.php';
else
return false;
}
</script>


Hasta Luego .-

oracle
19-05-2007, 20:46:53
No tengo dicho formulario en la pagina, es simplemente una tabla cuyos valores voy imprimiendo con codigo php.

La tarea del action del form en este caso lo esta asumiendo el href del vinculo. Claro. aun asi puede ser lo que me estas diciendo, pero en este caso como hago para referirme al "vinculo" dentro de la funcion javascript??

He tratado tambien de pasarle el parametro $cons[user] que originalmente utilizo en el href del vinculo a la funcion javascript y desde alli mismo redireccionar, pero tampoco nada, claro, acepto sugerencias...

Saludos

dec
19-05-2007, 20:50:56
Hola,

Tal vez podamos usar el "return", pues, aunque habrá que probarlo en diferentes navegadores, creo que algo así es lo que uno podría esperar del navegador:


<a onclick="return confirm('Seguro?');"
href="http://www.clubdelphi.com">ClubDelphi.com</a>


Es decir, "Confirma que el usuario quiere abrir el enlace". Si se confirma, "return value True", y el flujo "sigue" y el enlace es abierto. Si no se confirma "return vale False"... y ahí acaba la historia. :)

oracle
20-05-2007, 00:04:38
Hola dec, también había probado con eso. Fijate que es casi el mismo principio de la otra via pero mucho mas corto, pero hace exactamente lo mismo. Manda el navegador para la pagina del href del vinculo. Creo que voy a meter la tabla dentro de un form y probar la via de nuestro amigo lucasarts_18, ya les dire entonces..............

dec
20-05-2007, 00:21:11
Hola,

Es curioso... yo acabo de probarlo en Internet Explorer 7, Opera 9 y Firefox 2 y en estos tres navegadores funciona como se espera. ¿Probaste sólo el código que copié? A ver si lo haz mezclado con "algo" y por eso no va bien...


<a onclick="return confirm('Seguro?');"
href="http://www.clubdelphi.com">ClubDelphi.com</a>


Copia ese código en un nuevo archivo y guarda este como documento HTML (.html)... debería funcionar... la lógica es la que antes he dicho: El "OnClick" del enlace se ejecuta antes que el propio enlace... es decir, antes de cargar el "href" se ejecuta el "OnClick".

Pues bien. Si este evento retorna "False", enlaces no se carga el enlace. Si retorna "True" se carga el enlace. Si quieres utilizar una función (porque tengas que comprobar alguna que otra cosa) puedes hacerlo también, pero, no habrás de olvidar el "return" en el evento "Onclick", de modo que el resultado de la función sea "True" o "False" y el efecto sea el mencionado arriba.

Nota: En Internet Explorer 7, curiosamente, te aparece una advertencia de seguridad... con sólo el código anterior... que ya es ser suspicaz, digo yo, y, si no permites la ejecución del contenido bloqueado... se cargará el enlace de marras si el usario lo pulsa. Si desbloqueas el contenido entonces todo va como se espera.

Ya digo, lo he probado en Internet Explorer 7, Opera 9 y Firefox 2.

oracle
20-05-2007, 00:37:35
Hola, si, o he probado cuando lo posteaste y efectivamente me funciono:



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><!-- InstanceBegin template="/Templates/ultimo.dwt" codeOutsideHTMLIsLocked="false" -->
<head>

<title>Gestion de Datos del Usuario</title>
</body>
<a onclick="return confirm('Seguro?');"
href="http://www.clubdelphi.com">ClubDelphi.com</a>

</body>

</html>




Lo he vuelto a probar en mi codigo y nada. Pero en fin no se si se han fijado en que el vinculo lo imprimo con un "echo" de php, y me parece que el problema es que cuando pongo <a onclick=return confirm('Seguro?').... el no asume el confirm().... dentro del onClick. probe anidarlo dentro de parentesis todo y tampoco. Ahora, le dejo solo el onclick=confirm('Seguro?') sin el return y muestra la ventana de confirmacion pero igualmente va para la siguiente pagina con cualquiera de las dos opciones. Fijate que en cualquier caso la diferencia con el tuyo son las comillas del onClick, ya que como te he dicho lo estoy imprimiendo con "echo".........


Saludos

dec
20-05-2007, 00:53:55
Hola,

Bueno. Pero ahora tenemos un problema con las comillas o lo que sea: pero el caso es que funcionar ha de funcionar, es cuestión de encontrarle las vueltas al asunto, de modo que el código se imprima en condiciones:



echo'
<a href="http://www.clubdelphi.com/"
onclick="return confirm(\'¿Seguro que quieres continuar?\')">ClubDelphi</a>
';



Fíjate que "escapo" las comillas que contienen la cadena del mensaje para "confirm". Esto lo hago para que dichas comillas no interfieran con las del propio "echo". Empero, las comillas dobles, las del "href" y las del "onclick" no interfieren en absoluto y pueden dejarse tal cual (y aun deben, puesto que en estos casos es menester, para cumplir con el estándar XHTML, utilizar comillas dobles y no simples).

oracle
20-05-2007, 01:25:56
Exacto Dec, era eso mismo. No sabia que se podían anidar de esa forma las comillas, siempre pense que la doble tenía cierta prioridad sobre la comilla simple. Muy ingenioso lo de los escapes.....y un agradecido saludo.....

dec
20-05-2007, 01:39:33
Hola,


(...) siempre pense que la doble tenía cierta prioridad sobre la comilla simple.


Bueno. En realidad ocurre que el contenido de las comillas dobles es "procesado" por PHP, y las variables que se encuentren serán "expandidas". El contenido entre comillas simples no se procesa, sino que es "retornado" tal cual.


$variable = 'sus usuarios';

echo "El valor de $$variable está en $variable";


Imprime la cadena: El valor de $clubdelphi está en sus usuarios


$variable = 'sus usuarios';

echo 'El valor de $$variable está en $variable';


Imprime la cadena: El valor de $$variable está en $variable

Pero, sí, puedes anidar comillas simples y dobles sin problemas... y a veces tienes que hacerlo porque no quede más remedio, o porque el resultado esperado lo haga necesario. :)

PD. Revisemos en todo caso el manual de PHP sobre "echo" (http://es2.php.net/manual/es/function.echo.php).

oracle
20-05-2007, 02:31:38
Muy buenos los ejemplos del manual..........:D