Foros del Web » Programando para Internet » Javascript »

Alertar ante cualquier intento de navegación que no sea un submit

Estas en el tema de Alertar ante cualquier intento de navegación que no sea un submit en el foro de Javascript en Foros del Web. holas, tengo un formulario de carga de datos con muchos campos y un usuario medio "nardo" (o nardo del todo) que antes de hacer click ...
  #1 (permalink)  
Antiguo 10/12/2003, 16:08
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Alertar ante cualquier intento de navegación que no sea un submit

holas, tengo un formulario de carga de datos con muchos campos y un usuario medio "nardo" (o nardo del todo) que antes de hacer click sobre el botón de guardar, es capaz de hacer click en cualquier otro enlace con la consiguiente pérdida de lo ingresado hasta el momento. Otra de las taradeces que suele hacer es intentar borrar con backspace estando fuera de un campo de formulario como puede ser un textarea o un type=text... con lo que se dirige a la página anterior y nuevamente pierde lo escrito.

La pregunta es... cómo hacer que al salir de la página en cuestión (ya sea por clickear sobre un enlace o haciendo un "atrás") se le alerte "está seguro que NO quiere guardar los cambios"?

Claro que:

1- Cuando presione "cancelar" quede donde está
2- Cuando presione "aceptar" se dirija hacia donde intentaba ir
3- Que esto no afecte al submit


Puse esto:

<body onUnload="return window.confirm('Está seguro que no desea guardar los cambios?')">

Pero no da bola... aprietes el botón que aprietes, va hacia donde se hizo click o lo que sea.

Aunque si a los enlaces le pongo:

<a href="otra_pagina.asp" onClick="return window.confirm('Está seguro que no desea guardar los cambios?')">ir a otro lado</a>

Si que funciona... aunque sólo para los enlaces y no para controlar un posible "backspace"

Alguna sugerencia?
  #2 (permalink)  
Antiguo 10/12/2003, 16:13
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Ahora se me acaba de ocurrir que puedo usar el alert en los enlaces y agregar "algo" que borre el historial de navegación para esas páginas "críticas". Con lo que cubriría, creo yo , todas las posibilidades de escaparse del formulario por error... pero esto último tampoco se como hacerlo
  #3 (permalink)  
Antiguo 10/12/2003, 16:44
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
'nas....

pues para el tema del backspace no se me ocurre ahora pero al menos para los clicks accidentales en los links puedes usar algo así


<script language="JavaScript">
function sale(){
for(m=0;m<document.getElementsByTagName('a').lengt h; m++){
document.getElementsByTagName('a')[m].onclick = function(){
return confirm('¿Seguro que querés rajar?')
}
}
}
window.onload = sale
</script>

Lo del evento unload no furula.. al menos en este caso. A ver si alguien con más imaginación que yo.....
  #4 (permalink)  
Antiguo 10/12/2003, 18:40
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Hola tuni!

a ver.. esto lo que haría, en caso de funcionar correctamente -que no lo dudo, pero no lo probaré hasta dentro de unas 15 horas-, es asignarle dinámicamente a todos los tags 'A' el onClick con el confirm...

Lo deduje bien?

Si sí, entonces me ahorraría de meter a mano un onClick en cada enlace... lo que me resulta ESTUPENDO!

Si no, etsplicame qué corno hace el script :D

Lo que restaría, como comentás, es controlar el backspace (el History, en realidad). Cosa que sé que se puede hacer porque lo vi en una página -ya no recuerdo cual era- que no me dejaba moverme ni pa'delante ni pa'trás salvo haciéndole click a los enlaces suministrados para tal fin... pero, como dije, no sé cómo hacerlo.

Bueno, igualmente todavía tengo 14 horas con 23 minutos (es que soy mu lento pa' escribir xD)

Saludos
__________________
...___...
  #5 (permalink)  
Antiguo 11/12/2003, 03:30
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Cita:
a ver.. esto lo que haría, en caso de funcionar correctamente -que no lo dudo, pero no lo probaré hasta dentro de unas 15 horas-, es asignarle dinámicamente a todos los tags 'A' el onClick con el confirm...

Lo deduje bien?
efesstivamente dedujiste bien!

con eso nomás te hace la faena automática y cualquier href de los a queda bajo la función.

Lo de la tecla backspace.... se me pasa alguna posibilidad por la cabeza, esta tarde me pongo a ver si saco algo que merezca la pena

  #6 (permalink)  
Antiguo 11/12/2003, 05:00
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola, tunait y dazuaga.

A lo mejor este mensaje os ayuda -> Pulsa porfa

Saludos,
  #7 (permalink)  
Antiguo 11/12/2003, 07:59
Avatar de jercer  
Fecha de Ingreso: octubre-2003
Mensajes: 373
Antigüedad: 20 años, 6 meses
Puntos: 13
Prueba con esto:

<body onbeforeunload="return window.confirm('Está seguro que no desea guardar los cambios?')">
  #8 (permalink)  
Antiguo 11/12/2003, 12:10
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Bien, el script de tunait funciona de maravillas. Muchas gracias, le daré muchísimo uso

JavierB, está muy buena la solución de "desactivar" el backspace pero ahora no deja borra pa' trás en el formulario
Se podrá hacer que esa función se use sólo en el body pero no en los campos de texto?

jercer, el onbeforeunload también actúa en el submit... cosa que no se desea (y no sé por qué tira dos confirmaciones... la puesta en el body y una que no se de donde sale)

Y bueno.. si no se puede no se puede y punto. tampoco es para tanto
  #9 (permalink)  
Antiguo 11/12/2003, 13:20
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola de nuevo.

Aquí va otro poco de código, aunque solo he conseguido que funcione en Netscape:
Código PHP:
<html>
<
head>
<
script>
function 
pulsar(e) {
    
tecla=(document.all) ? e.keyCode e.which;
    
elem=e.srcElement.type;
    if (
tecla==&& elem!='text' && elem!='textarea'
        return 
false
</script>
</head>

<body onKeyDown="return pulsar(event)">
</body>
</html> 
Saludos,
  #10 (permalink)  
Antiguo 11/12/2003, 16:35
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Genial, esa era la idea, JavierB

¿por qué dices que no furula más que en NS? a mi me ha furulado en IE5.0
  #11 (permalink)  
Antiguo 11/12/2003, 18:35
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
bien, bien, bien! eTselente!

(igual no lo probé, igual.. pero si la señora esposa de don Cacho dice que furula en IE5, no sé por qué no habría de furular en la versión 6 que es la que usamos en una gran mayoría. Mañana cuando lo pruebe enviaré los aplausos y agradecimientos pertinentes a tan gentiles colaboradores)

Saludos

PD: Qué día hoy... qué diiiiiiía... alguien tiene un analgésico para el dolor de marulo? Me vendría muy bien..
__________________
...___...
  #12 (permalink)  
Antiguo 12/12/2003, 02:53
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola, tunait.

Donde dije digo digo diego Quise decir que solo pude hacerlo funcionar en el Explorer

Saludos,
  #13 (permalink)  
Antiguo 12/12/2003, 12:24
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola. Soy yo otra vez.

Por si alguien está interesado en hacerlo funcionar también en Netscape, ahí va eso:
Código PHP:
function borrar(e) {
    
elem=(document.all) ? e.srcElement.type e.target.type;
    
tecla=(document.all) ? e.keyCode e.which;
    if (
tecla==&& elem!='textarea' && elem!='text')
        return 
false;

Saludos,
  #14 (permalink)  
Antiguo 12/12/2003, 12:51
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Yo solo digo una cosa...


Deberías vaciar el history...
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.

Última edición por KarlanKas; 12/12/2003 a las 12:52
  #15 (permalink)  
Antiguo 12/12/2003, 13:20
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola, KarlanKas.

Esto me suena de otro mensaje En esta caso dazuaga habla de un usuario medio "nardo" (o nardo del todo). Utilizando mi diccionario argentino-cheli, deduzco que se trata de alguien tontolaba, gilí, gilorio, manta, tolai, tolili, etc. No creo que alguien así conozca javascript:history.back(-1) y, además, sea capaz de escribirlo correctamente.

Saludos,
  #16 (permalink)  
Antiguo 12/12/2003, 13:46
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Lo prometido es deuda:


Gracias, gracia, gracias, gracias y grascias!

Essspetacular!


Con respecto a lo de history.back(), mi querido abducido, es como bien dedujo el amigo que tiene el e-mail del que sabe. El usuario no sabe nada de estas cosas. La idea era prevenir que se valla accidentalmente del formulario... ahora, si quiere y sabe como poner history.back en la barra de direcciones, que lo haga! Está claro que eso no lo haría de manera accidental


Cita:
Deberías vaciar el history...
Me indicarías como hacerlo?
  #17 (permalink)  
Antiguo 13/12/2003, 05:33
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Pues con mucho gusto!

<script>
window.history.back=null
window.history.go=null
</script>

Esto no vacía el historial, pero impide usarlo. Ya, yo también me quedé sorprendido cuando ví que iba (En el IE 6.0 sp1 weichor 34 macgregor 345).

Un saludooo....
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:07.