Foros del Web » Programando para Internet » Javascript »

Duda en codigo

Estas en el tema de Duda en codigo en el foro de Javascript en Foros del Web. Encontré este código para avanzar con la tecla enter entre los campos de un formulario: [URL="http://www.elcodigo.com/cgi-bin/DBread.cgi?tabla=scripts&campo=0&clave=82"]http://www.elcodigo.com/cgi-bin/DBread.cgi?tabla=scripts&campo=0&clave=82[/URL] El codigo completo es este: Código PHP: < script language ...
  #1 (permalink)  
Antiguo 11/11/2010, 19:32
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años, 8 meses
Puntos: 7
Pregunta Duda en codigo

Encontré este código para avanzar con la tecla enter entre los campos de un formulario:
[URL="http://www.elcodigo.com/cgi-bin/DBread.cgi?tabla=scripts&campo=0&clave=82"]http://www.elcodigo.com/cgi-bin/DBread.cgi?tabla=scripts&campo=0&clave=82[/URL]

El codigo completo es este:
Código PHP:
<script language="javascript" type="text/javascript">
siguienteCampo "campo1"
nombreForm "miFormulario"

function TelcaPulsada) {

   if ( 
window.event != null)        //IE4+
      
tecla window.event.keyCode;
   else if ( 
!= null )         //N4+ o W3C compatibles
      
tecla e.which;
   else
      return;
  
   if (
tecla == 13) {           //se pulso enter
      
if ( siguienteCampo == 'fin' ) {      //fin de la secuencia, hace el submit
         
alert('Envio del formulario.')      //eliminar este alert para uso normal
         
return false          //sustituir por return true para hacer el submit
      
} else {             //da el foco al siguiente campo
         
eval('document.' nombreForm '.' siguienteCampo '.focus()')
         return 
false
      
}
   }
}

document.onkeydown TelcaPulsada;      //asigna el evento pulsacion tecla a la funcion
if (document.captureEvents)        //netscape es especial: requiere activar la captura del evento
  
document.captureEvents(Event.KEYDOWN)
</script>

   </head>

<body onload="document.miFormulario.campo1.focus();">
     <p>ejemplo</p>


<form name="miFormulario" onSubmit="return false" >
1. <input type="text" name="campo1" size="12" onFocus="siguienteCampo ='campo2';"><br>
2. <input type="text" name="campo2" size="12" onFocus="siguienteCampo ='campo3';"><br>
3. <input type="text" name="campo3" size="12" onFocus="siguienteCampo ='campo4';"><br>
4. <input type="text" name="campo4" size="12" onFocus="siguienteCampo ='fin';"><br>

<input type="submit" name="done" value="Enviar"></form>

   </body>
 </html> 
Mis dudas son:
Cuando se le da click a Enviar hacia donde envía la data?? No le falta el archivo destino a este ejemplo??
Dónde debe ir si al dar click en Enviar no hace foco en el botón??
Gracias.
  #2 (permalink)  
Antiguo 11/11/2010, 20:00
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: Duda en codigo

tu duda no tiene nada que ver con javascript sino mas bien sobre las caracteristicas del navegador. por norma del w3c, un formulario debe tener un action. sin embargo, cuando el formulario carece de action, los datos se envian a la misma ruta. o sea, al mismo documento que muestra el formulario. la ultima pregunta no la comprendi...
Código:
<!ATTLIST FORM
  action      %URI;          #REQUIRED -- server-side form handler --
...
>
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 12/11/2010, 11:27
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: Duda en codigo

Cita:
Iniciado por zerokilled Ver Mensaje
tu duda no tiene nada que ver con javascript sino mas bien sobre las caracteristicas del navegador. por norma del w3c, un formulario debe tener un action. sin embargo, cuando el formulario carece de action, los datos se envian a la misma ruta. o sea, al mismo documento que muestra el formulario. la ultima pregunta no la comprendi...
Código:
<!ATTLIST FORM
  action      %URI;          #REQUIRED -- server-side form handler --
...
>
Entonces mi pregunta sería: Si quiero modificar ese formulario para uno propio, en donde necesito colocar un action="procesar.php" qué tengo que modificar en ese formulario ??

Y sobre la pregunta que no entendiste era que no hace foco en Enviar pero dice que envía los datos. Esa era mi duda.
  #4 (permalink)  
Antiguo 12/11/2010, 12:18
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: Duda en codigo

disculpa si tiene un tono sarcastico o lo considero demasiado obvio.... ¿sabes lo que son atributos de elementos? el action lo agregas como atributo del elemento <form>. sobre la ultima pregunta pues parece que depende de cada UA (user-agent: motor de los navegadores que procesa html). por ejemplo, en webkit (chrome y safari) el boton no recibe foco, pero en gecko (firefox) y trident (iexplorer8) el boton recibe foco. de todos modos, en webkit esto sucede cuando usas el raton pero si mueves el foco ya sea con funciones javascript o con la tecla Tab (Tabular) el boton recibe foco.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 12/11/2010, 13:15
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años, 8 meses
Puntos: 7
Pregunta Respuesta: Duda en codigo

Cita:
Iniciado por zerokilled Ver Mensaje
disculpa si tiene un tono sarcastico o lo considero demasiado obvio.... ¿sabes lo que son atributos de elementos? el action lo agregas como atributo del elemento <form>. sobre la ultima pregunta pues parece que depende de cada UA (user-agent: motor de los navegadores que procesa html). por ejemplo, en webkit (chrome y safari) el boton no recibe foco, pero en gecko (firefox) y trident (iexplorer8) el boton recibe foco. de todos modos, en webkit esto sucede cuando usas el raton pero si mueves el foco ya sea con funciones javascript o con la tecla Tab (Tabular) el boton recibe foco.
, No me enoja tu sarcasmo... claro que sé los elementos, pero también sé que hay otras formas de armar los elementos sobre todo cuando se usa javascript.
Tons quedaría así cierto??
Código PHP:
<form name="miFormulario" onSubmit="return false" action="proceso.php"
(sin ningún otro cambio?).
Te hago la pregunta porque leí en algún sitio que si tiene un evento como OnSubmit es mejor utilizar un Onclick para enviar los datos a otro archivo (creo).

Y sobre lo otro que depende del navegador, entonces, como opinión personal tuya sugieres utilizar esta forma de pasar con los enters sobre los campos?? o sugieres alguna otra forma mejor??

Gracias por tu tiempo y tus comentarios.
  #6 (permalink)  
Antiguo 12/11/2010, 14:06
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: Duda en codigo

pues de acuerdo a los comentarios/instrucciones del codigo tienes que eliminar una linea y substituir un valor por otro.
Código:
         alert('Envio del formulario.')      //eliminar este alert para uso normal 
         return false          //sustituir por return true para hacer el submit
lo cierto es que con esos cambios no me trabaja en chrome; no he probado en otro navegador pero debe ser lo mismo. en el elemento <form> tiene el evento onsubmit, es por ello que no se envia el formulario, simplemente elimina ese atributo.

Cita:
Te hago la pregunta porque leí en algún sitio que si tiene un evento como OnSubmit es mejor utilizar un Onclick para enviar los datos a otro archivo (creo).
seguramente lo habras entendido mal. no es lo mismo onclick que onsubmit; ambos responden a eventos distintos. el evento submit no necesiariamente se inicia con accion del raton, incluso puede ser con el teclado o dependiendo del equipo/dispositivo pudiera iniciarse con otra interfaz. por tanto, lo correcto seria utilizar onsubmit para cualquier tarea: validacion, manipulacion de formulario, cancelacion de envio, u otros. para el envio de datos no hay que preocuparse, de eso se encargara el navegador.

Cita:
Y sobre lo otro que depende del navegador, entonces, como opinión personal tuya sugieres utilizar esta forma de pasar con los enters sobre los campos?? o sugieres alguna otra forma mejor??
en mi opinion no tiene importancia como lo quieras hacer siempre y cuando sea un formulario accesible. es decir, que funcione incluso sin javascript. lo que antes quise comentar era una observacion de que cada navegador tiene sus particularidades pero en la mayoria de los casos este no afecta o no deberia afectar la funcionalidad principal. o sea, si al hacer click sobre el boton de envio, éste no recibe el foco, no deberia afectar en el proceso de envio. aqui la culpa no es el script, sino las caracteristicas del navegador.

pd: solo por aclarar... lo del sarcasmo, no era el tono que queria darle, era solo si lo percibias de esa forma...
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 12/11/2010 a las 14:11
  #7 (permalink)  
Antiguo 12/11/2010, 17:14
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: Duda en codigo

Cita:
Iniciado por zerokilled Ver Mensaje
pues de acuerdo a los comentarios/instrucciones del codigo tienes que eliminar una linea y substituir un valor por otro.
Código:
         alert('Envio del formulario.')      //eliminar este alert para uso normal 
         return false          //sustituir por return true para hacer el submit
lo cierto es que con esos cambios no me trabaja en chrome; no he probado en
(...)
pd: solo por aclarar... lo del sarcasmo, no era el tono que queria darle, era solo si lo percibias de esa forma...
Creo que entendí todo. Ahora voy a probar y te aviso cualquier problema. ok? Y no hay problema. Además debo agradecer el tiempo que te has dado para analizar y responder.
Gracias.
  #8 (permalink)  
Antiguo 12/11/2010, 20:51
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años, 8 meses
Puntos: 7
Sonrisa Respuesta: Duda en codigo

Le hice algunos cambios, creo que ahora sí funciona, en FF, IE y en Chrome.
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
script language="javascript" type="text/javascript">
siguienteCampo "campo1"
nombreForm "miFormulario"

function TelcaPulsada) {

   if ( 
window.event != null)        //IE4+
      
tecla window.event.keyCode;
   else if ( 
!= null )         //N4+ o W3C compatibles
      
tecla e.which;
   else
      return;
  
   if (
tecla == 13) {           //se pulso enter
      
if ( siguienteCampo == 'fin' ) {      //fin de la secuencia, hace el submit
         
return true          //sustituir por return true para hacer el submit
      
} else {             //da el foco al siguiente campo
         
eval('document.' nombreForm '.' siguienteCampo '.focus()')
         return 
false
      
}
   }
}
document.onkeydown TelcaPulsada;      //asigna el evento pulsacion tecla a la funcion
if (document.captureEvents)        //netscape es especial: requiere activar la captura del evento
  
document.captureEvents(Event.KEYDOWN)
</script>
</head>
<body onload="document.miFormulario.campo1.focus();">
<p>ejemplo</p>
<form name="miFormulario" action="procesar.php" method="post">
1. <input type="text" name="campo1" size="12" onFocus="siguienteCampo ='campo2';"><br>
2. <input type="text" name="campo2" size="12" onFocus="siguienteCampo ='campo3';"><br>
3. <input type="text" name="campo3" size="12" onFocus="siguienteCampo ='campo4';"><br>
4. <input type="text" name="campo4" size="12" onFocus="siguienteCampo ='submit';"><br>
<input type="submit" name="submit" value="Enviar" onFocus="siguienteCampo ='fin';"></form>
</body>
</html> 
No he capturado los datos pero hace la llamada a proceso.php.
Espero comentarios y sugerencias para mejorar esto.
Gracias y saludos.

Etiquetas: Ninguno
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 01:58.