Foros del Web » Programando para Internet » Javascript »

no submit

Estas en el tema de no submit en el foro de Javascript en Foros del Web. Wenas: Cuando tienes una página con un formulario en el q hay un botón submit, y le das el foco a la página mediante, por ...
  #1 (permalink)  
Antiguo 18/11/2003, 05:29
Avatar de fjmasero  
Fecha de Ingreso: diciembre-2002
Mensajes: 488
Antigüedad: 21 años, 5 meses
Puntos: 1
no submit

Wenas:

Cuando tienes una página con un formulario en el q hay un botón submit, y le das el foco a la página mediante, por ejemplo, un
Código:
<body onload='documento.formulario.elemento.focus()'>
el botón del submit es como si estuviera activo, y si se pulsa enter, se ejecuta, igual q si se hubiera hecho click sobre dicho botón, efecto q quisiera poder evitar.

¿Alguién sabe como?.

Una observación: si no se le da el foco a la página, esto no pasa.

Por último, no puedo cambiar el botón submit a button por necesidades de funcionalidad de la página.

Salu2 y gracias
__________________
No es sabio el que sabe sino el que no sabe y quiere aprender

Última edición por fjmasero; 18/11/2003 a las 05:34
  #2 (permalink)  
Antiguo 18/11/2003, 08:19
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 5 meses
Puntos: 38
Hola fjmasero.

Para evitar el foco automático, evita usar submit. Puedes poner en su lugar un botón cualquiera que en su evento "onclick" realice el submit. Algo asi:

Código PHP:
<input type="button" value="Enviar" onclick="javascript:document.nombreDelForm.submit()"
Saludos.
  #3 (permalink)  
Antiguo 18/11/2003, 08:23
 
Fecha de Ingreso: noviembre-2002
Ubicación: Washington, DC
Mensajes: 822
Antigüedad: 21 años, 6 meses
Puntos: 5
Podrias en vez de hacerlo como botón de "submit", hacerlo tipo "button" y que el submit sea solo cuando le den click...
O sino tambien en unos archivitos viejos que tengo de algun codigo por ahi esto va en el HEAD
Código:
<script type="text/javascript"><!--
function noenter() {
  return !(window.event && window.event.keyCode == 13); }
//--></script>
Y luego a cada input colocale:
Código:
onkeypress="return noenter()"
Debe haber alguna forma mas limpia y efectiva pero esto es lo que se me ha ocurrido por ahora...

Espero te funcione.
__________________
Yanira
  #4 (permalink)  
Antiguo 18/11/2003, 08:24
 
Fecha de Ingreso: noviembre-2002
Ubicación: Washington, DC
Mensajes: 822
Antigüedad: 21 años, 6 meses
Puntos: 5
Se me adelanto Kao!
__________________
Yanira
  #5 (permalink)  
Antiguo 18/11/2003, 08:29
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 5 meses
Puntos: 38
Jeje, tiempo sin chocar contigo Yanix.

Bueno fjmasero, tienes dos soluciones distintas para que escojas.

Saludos a ambos.
  #6 (permalink)  
Antiguo 18/11/2003, 09:51
Avatar de fjmasero  
Fecha de Ingreso: diciembre-2002
Mensajes: 488
Antigüedad: 21 años, 5 meses
Puntos: 1
Hola a todos y gracias.

La solución q me habéis propuesto consistente en no tener botones submit, como dije en el post inicial, no puedo utilizarla, puesto q dichos botones submit tienen asociada una serie de funcionalidades q no puedo tocar.

Sin embargo, la solución que propone Yanix , con el uso de la funcíón noreturn y el evento onKeyPress, en las primeras pruebas q he hecho, parece que funciona.

Gracias nuevamente.

Salu2
__________________
No es sabio el que sabe sino el que no sabe y quiere aprender

Última edición por fjmasero; 18/11/2003 a las 09:53
  #7 (permalink)  
Antiguo 18/11/2003, 09:57
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 5 meses
Puntos: 38
Yanix: 1
Kaopectate: 0

Bueno, funcionó y eso es lo importante.

Saludos.
  #8 (permalink)  
Antiguo 18/11/2003, 12:19
Avatar de fjmasero  
Fecha de Ingreso: diciembre-2002
Mensajes: 488
Antigüedad: 21 años, 5 meses
Puntos: 1
Bueno, ya he podido ponerme un poco serio con esto, y lamento comunicaros q no funciona la solución propuesta por Yanix.

Como digo, al cargarse la página, y coger el foco, en mi caso un campo del formulario, si se hace enter, ejecuta el submit asociado al 1er boton q tiene este type.

Si queréis ver lo q digo, coger este código
Código:
<html>
  <head>
    <title>Untitled</title>
    <script language="javascript">
    <!--
      function noenter()
     {
       return !(window.event && window.event.keyCode == 13);
     }
    //-->
   </script>
  </head>
  <body onLoad="document.formulario.txt.focus()">
    <form action="javascript:alert('wenasssss')" method="post" name="formulario" id="formulario">
      <input type="submit" name="enviar" value="enviar" onkeypress="return noenter()">
      <input type="text" name="txt" value="xxxxxxxxxxxx">
    </form>
  </body>
</html>
y lo probáis.

Se trata de un ejemplo de funcionamiento. Como podréis ver, se trata de un ejemplito simple, q cuando se hace submit, se ejecuta un alert.

Bueno, pues si cargáis la página, y sin hacer nada +, directamente, pulsáis enter, se ejecuta el alert, es decir, hace el submit. Incluso se puede ver que el botón del submit tiene cierto tonillo como si estuvier seleccionado, pero sin llegar a ser lo mismo que cuando de verdad se hace click, o se llega mediante tabulación, sobre este.

Ese es el efecto q quiero solucionar. Que solo se ejecute el submit cuando se haga click en el botón de enviar, o cuando esté seleccionado y se haga enter.

Si quitáis el onLoad del body, no ocurre.

Salu2
__________________
No es sabio el que sabe sino el que no sabe y quiere aprender

Última edición por fjmasero; 18/11/2003 a las 12:26
  #9 (permalink)  
Antiguo 18/11/2003, 13:16
 
Fecha de Ingreso: noviembre-2002
Ubicación: Washington, DC
Mensajes: 822
Antigüedad: 21 años, 6 meses
Puntos: 5
No corazon...me explique mal.
pon el onkeypress="return noenter()" en el textfield...asi:
Código:
<html>
  <head>
    <title>Untitled</title>
    <script language="javascript">
    <!--
      function noenter()
     {
       return !(window.event && window.event.keyCode == 13);
     }
    //-->
   </script>
  </head>
  <body onLoad="document.formulario.txt.focus()">
    <form action="javascript:alert('wenasssss')" method="post" name="formulario" id="formulario">
      <input type="submit" name="enviar" value="enviar" >
      <input type="text" name="txt" value="xxxxxxxxxxxx" onkeypress="return noenter()">
    </form>
  </body>
</html>
Y me avisas ;)
__________________
Yanira
  #10 (permalink)  
Antiguo 19/11/2003, 03:09
Avatar de fjmasero  
Fecha de Ingreso: diciembre-2002
Mensajes: 488
Antigüedad: 21 años, 5 meses
Puntos: 1
Hola Yanix.

Nuevamente, GRACIAS.

Parace q funciona , aunque tengo q integrarlo en mi aplicación, y seguiré haciendo pruebas.

Como digo, funciona, pero no entiendo pq . Si puedes, me lo expllicas.

Salu2
__________________
No es sabio el que sabe sino el que no sabe y quiere aprender

Última edición por fjmasero; 19/11/2003 a las 03:15
  #11 (permalink)  
Antiguo 19/11/2003, 08:56
 
Fecha de Ingreso: noviembre-2002
Ubicación: Washington, DC
Mensajes: 822
Antigüedad: 21 años, 6 meses
Puntos: 5
Claro...

window.event en IE es donde se define lo que ocurre (un evento) como el presionar ENTER, a que elemento del formulario le diste click, etcetera...

Keycode es el número o código que repesenta la tecla que en este caso se presiona. En este caso 13 representa ENTER.
Keycode no es el único..sino también shiftKey, altKey, y otros que podrias utilizar para el evento.

El número del KeyCode varía dependiendo de la tecla y navegador que se utilice. No te puedo ayudar en Netscape porque no lo utilizo y de hecho creo no tiene window.event sino otras vías alternas utilizando which, pero no sabria decirte al respecto.

El script lo que hace es que al presionar ENTER e intentar enviar el formulario, éste se te cancela porque le esta devolviendo un RETURN con valor falso.
(Observa el "!" antes del paréntesis en la función)
Aun asi, intenta usando return !(window.event.keyCode == 13); en la función. Ha de funcionar igual, no lo he probado aun. Eso sí, no quites los paréntesis porque si lo usas como return !window.event.keyCode == 13; seguro no te dejará escribir en el textfield.

Por el onkeypress , cada vez que estás presionando alguna tecla dentro del textfield, se te ejecutará y devolverá el RETURN falso de la función. Por eso te negará el darle ENTER dentro del textfield.

Para practicar un ratito, intenta por ejemplo colocarle un alert dentro de la función al principio antes del return ! y observa que al oprimir cualquier tecla dentro del textfield, el alert se te ejecutará. Ejemplo:
Código:
<html>
  <head>
    <title>Untitled</title>
    <script language="javascript">
    <!--
      function noenter()
     {
       alert('Aparezco cuando se presiona cualquier tecla....!');
       return !(window.event.keyCode == 13);
     }
    //-->
   </script>
  </head>
  <body onLoad="document.formulario.txt.focus()">
    <form action="javascript:alert('wenasssss')" method="post" name="formulario" id="formulario">
      <input type="submit" name="enviar" value="enviar" >
      <input type="text" name="txt" value="xxxxxxxxxxxx" onkeypress="return noenter()">
    </form>
  </body>
</html>
PD: Una lista de los KeyCodes la puedes encontrar en: http://www.js-examples.com/beginners/key_codes.php3

Espero haberme explicado ?

__________________
Yanira
  #12 (permalink)  
Antiguo 19/11/2003, 11:17
Avatar de fjmasero  
Fecha de Ingreso: diciembre-2002
Mensajes: 488
Antigüedad: 21 años, 5 meses
Puntos: 1
GRACIAS eres un monstruo Yanix.

Otra observación: entre las pruebas q estoy haciendo, me estoy dando cuenta q es un "problema" de los botons submit solamente.

He comprobado, y no lo había hecho nunca, y mira q llevo hechos formularios, q con un simple
Código:
<form action="..." ...>
  <input type="text" ...>
</form>
sin ni siquiera botones, si el textfield tiene el foco (imprescindible), y se hace enter directamente, se ejecuta el submit del formulario.

No se, ¿q te sugiere?, ¿tiene explicación?.

Salu2
__________________
No es sabio el que sabe sino el que no sabe y quiere aprender

Última edición por fjmasero; 19/11/2003 a las 11:56
  #13 (permalink)  
Antiguo 19/11/2003, 12:20
 
Fecha de Ingreso: noviembre-2002
Ubicación: Washington, DC
Mensajes: 822
Antigüedad: 21 años, 6 meses
Puntos: 5
Buenisima observación fjmasero.

En IE si tienes un formulario con UN SOLO input tipo text y el foco lo tienes en éste, al presionar ENTER se hará el submit independientemente de que el botón sea tipo Submit o tipo button.

Ahora bien, si tienes DOS inputs tipos text y un botón tipo Button, (independientemente de que uno de los inputs tipo text tengan el foco), el formulario no se te enviará al presionar ENTER.

Pero si tienes más de un input tipo text y algún botón de submit en el formulario, se enviará al presionar ENTER.

Por qué este comportamiento? Bienvenido al mundo de las incógnitas ! Siguieron el standard parcialmente desde el HTML 2.0 en eso...

Tambien se dice que en versiones previas a IE 4 el comportamiento era distinto y que aquellos usuarios que no podian usar el mouse o no tenian accesibilidad para ello, tenian que darle tab+tab+tab+tab para poder llegar al botón de Enviar y ésta fue una manera de facilitarlo... El botón de submit automaticamente enviara todo al presionar solamente ENTER si se está en alguno de estos inputs tipo texto....

Facilidad para unos y dificultad para otros...todo un debate!
__________________
Yanira

Última edición por Yanix; 19/11/2003 a las 12:25
  #14 (permalink)  
Antiguo 20/11/2003, 03:29
Avatar de fjmasero  
Fecha de Ingreso: diciembre-2002
Mensajes: 488
Antigüedad: 21 años, 5 meses
Puntos: 1
Yyyyyyyyyy seguimos.

Te/Os informo.

He seguido con pruebas.

1º: Con Netscape 6.X el comportamiento es similar.

2º: No es necesario q haya un botón, de ningún tipo, para enviar el formulario, si solo hay un textfield, con el foco, eso si.

3º: Efectivamente, si hay + de un textfield, sin botones, o sin botones submit, no lo envia. Lo extraño e incomprensible es q si solo hay un textfield, sin botones, o con botones de tipo button, si lo envia. INCREIBLE. :-p

Bueno, he hecho alguna cositas +, pero irrelevantes.

Espero q esto sirva para alguién en el futuro.

Salu2 a todos.

P.D.: Aprovechándome de vuestra buena voluntad .... Nadie ha contestado a este post q publique hace algunos días http://www.forosdelweb.com/showthrea...748#post533748. No se si lo habreis leido, pero si no, ¿podríais hacerlo y si es posible contestar?.
__________________
No es sabio el que sabe sino el que no sabe y quiere aprender

Última edición por fjmasero; 20/11/2003 a las 03:37
  #15 (permalink)  
Antiguo 20/11/2003, 09:18
 
Fecha de Ingreso: noviembre-2002
Ubicación: Washington, DC
Mensajes: 822
Antigüedad: 21 años, 6 meses
Puntos: 5


No lo habia leido..pero ya está.
Saludos
__________________
Yanira
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 13:28.