Foros del Web » Programando para Internet » Javascript »

Usar javascript:[funcion()] en un action de form html

Estas en el tema de Usar javascript:[funcion()] en un action de form html en el foro de Javascript en Foros del Web. Buenas a todos. Tengo algunos problemillas en la web que estoy haciendo pero este no lo he sabido solucionar y por eso recurro a vosotros. ...
  #1 (permalink)  
Antiguo 08/05/2012, 10:34
 
Fecha de Ingreso: enero-2010
Mensajes: 30
Antigüedad: 14 años, 4 meses
Puntos: 0
Pregunta Usar javascript:[funcion()] en un action de form html

Buenas a todos.

Tengo algunos problemillas en la web que estoy haciendo pero este no lo he sabido solucionar y por eso recurro a vosotros.

Tengo un formulario multipagina en el que vas rellenando parametros seccion a seccion (cada una es un php), y una vez que lo e hecho, lo he metido en la web principal, en menu.php (que es llamado por un include desde index.php).

Mi idea es ir haciendo el formulario y pasando cada seccion estando siempre dentro del menu.php (sin cambiar ni recargar la pagina).

En metodo que uso para no tener que recargar la pagina es el siguiente.

Código:
function Enviar(_pagina,capa) {
    var ajax;
    ajax = ajaxFunction();
    ajax.open("POST", _pagina, true);
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    ajax.onreadystatechange = function() {
		if (ajax.readyState==1){
			document.getElementById(capa).innerHTML = " Aguarde por favor...";
			     }
		if (ajax.readyState == 4) {
                document.getElementById(capa).innerHTML=ajax.responseText; 
		     }}
	ajax.send(null);
}
Dentro del archivo menu.php tengo la siguiente llamada...

Código:
a href=javascript:Enviar('formulario/formulario.php','contenido') > Agregar</a>
Para que al ser llamado el formulario, no tenga que recargar la web.

Hasta ahi todo perfecto, el problema biene a la hora de ir pasando seccion a seccion y conservando los datos que voy introduciendo.

He probado por hacer lo mismo desde "action" pero nada

Código:
action="javascript:Enviar('formulario/formulario.php','contenido')"
He estado mirando por foros (incluido este) y he encontrado que use onsubmit en vez de action, pero sigue in cogerme los datos, otra posibilidad que he vsto es usar la siguiente forma "action=formulario/paso2.php enviar(/formulario/paso2.php, contenido);" pero tampoco.

Que es lo que puedo tener mal, a como deberia hacer esto. He pensado que desde action llamae a simplemente a una funcion js y esta funcion llame a la funcion enviar para seguir con el siguiente paso, pero no se si funcionara.

Otro problema que pienso es que como las secciones del formulario tiene codigo php y quiero que sea llamado por una funcion js es posible que no recoja los valores ya que php es para servidor y js ara cliente, pero aun asi, js deberia llamar bien a la web, y ahi que se encargue de cojer los datos, no se.

Ah por cierto: Para evitar posibles explicaciones, el codigo del formulario funciona perfectamente, me coge todos los datos, pero claro, voy cargando la pagina paso2.php aparte y no dentro de menu.php que es la idea, el problema esta en el action del form, o eso creo yo.

Muchas gracias por la ayuda.
  #2 (permalink)  
Antiguo 08/05/2012, 11:05
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Usar javascript:[funcion()] en un action de form html

1 - no debes incluir código en el action, debes de incluirlo en el onsubmit y cancelar el submit real, puedes con solo hacer return false; al final

2 - en ajax necesitas verificar status==200 , consulte un manual de AJAX
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 08/05/2012, 11:10
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Usar javascript:[funcion()] en un action de form html

Hola:

Te recomiendo que la página funcione sin depender de javascript y luego adaptes la llamada Ajax al formulario (el evento submit) para no recargar la página...

De tu código, evidentemente no pasas ningún parámetro, así que en el servidor no llega nada...

Para pasar parámetros por post, debes pasárselos con el método send(), de la misma manera que se hace como si fuera por url:

Ajax.send("param1=" + valor1 + "&param2=" + valor2);

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 08/05/2012, 11:13
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Usar javascript:[funcion()] en un action de form html

Esta es otra forma de hacerlo

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  
  7. <style type="text/css">
  8. /*<![CDATA[*/
  9.  
  10. /* estilos */
  11.  
  12. form{
  13. width: 500px;
  14. height: 300px;
  15. display: block;
  16. }
  17.  
  18. #paso1, #paso2,#paso3 {
  19. width: 500px;
  20. height: 300px;
  21. border: solid 1px #000;
  22. }
  23. #paso2, #paso3{
  24. display: none;
  25. }
  26. /*]]>*/
  27. <script type="text/javascript">
  28. //<![CDATA[
  29. /* script */
  30. function paso1(){
  31. document.getElementById('paso1').style.display='block';
  32. document.getElementById('paso2').style.display='none';
  33. document.getElementById('paso3').style.display='none';
  34. }
  35. function paso2(){
  36. document.getElementById('paso1').style.display='none';
  37. document.getElementById('paso2').style.display='block';
  38. document.getElementById('paso3').style.display='none';
  39. }
  40. function paso3(){
  41. document.getElementById('paso1').style.display='none';
  42. document.getElementById('paso2').style.display='none';
  43. document.getElementById('paso3').style.display='block';
  44. }
  45.  
  46. function ver(){
  47. alert(document.getElementById('nombre').value + '-' + document.getElementById('apellido').value);
  48. }
  49.  
  50. //]]>
  51. </head>
  52. <p>
  53. <a href="#" onclick="paso1();">uno</a> | <a href="#" onclick="paso2();">dos</a> | <a href="#" onclick="paso3();">tres</a>
  54. </p>
  55. <form action="x.php" method="post">
  56. <div id="paso1">
  57. Nombre : <input type="text" name="nombre" id="nombre" />
  58. </div>
  59. <div id="paso2">
  60. Apellido: <input type="text" name="apellido" id="apellido" />
  61. </div>
  62. <div id="paso3">
  63. <input type="button" name="procesar" onclick="ver();" value="procesar"/>
  64. </div>
  65. </form>
  66. </body>
  67. </html>

Creo que es má simple, al final puse solo un button, no un submit para que verifiques que los valores siguen estando ahi, aunque cada sección se oculte, el javascript se puede abreviar un poco, pero si no son muchos pasos se puede dejar asi

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 08/05/2012, 15:41
 
Fecha de Ingreso: enero-2010
Mensajes: 30
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Usar javascript:[funcion()] en un action de form html

Muchas gracias a los tres por contestar tan rapido.


La verdad es que si, deberia aprender un poco mas de ajax (que lo unico que se es lo que voy nesesitando y algunos ejemplos, osea poco).

En cuento a "emprear" probare lo que dices, son 5 pasos asi que no son muchos, ademas de esa forma creo que me puedo evitar tener que ir recogiendo en cada paso todos los elementos introducidos y meterlos en <input hidden> para pasarlo por $_POST en el siguiente paso.

Aun asi probare las formas que me habeis recomendado los tres.

Hasta luego.

Etiquetas: ajax, formulario, funcion, html, js, php, usar, acciones
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 23:39.