Foros del Web » Programando para Internet » Javascript »

Cómo pasar Formulario como parametro de una función?

Estas en el tema de Cómo pasar Formulario como parametro de una función? en el foro de Javascript en Foros del Web. Buenas... Espero todos se encuentren bien. Tengo una duda. he creado una función que recibe como parametro un formulario de la forma this.form en el ...
  #1 (permalink)  
Antiguo 08/07/2009, 10:10
 
Fecha de Ingreso: noviembre-2008
Mensajes: 89
Antigüedad: 15 años, 5 meses
Puntos: 0
Cómo pasar Formulario como parametro de una función?

Buenas... Espero todos se encuentren bien.

Tengo una duda. he creado una función que recibe como parametro un formulario de la forma this.form en el evento onclick de un boton.

Código HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>

<script type="text/javascript">
function RecorrerForm(formulario){
	//  en la parte formulario.name he probado tambien con formulario.id y no funciona
	var formVar=document.getElementById(formulario.name);   

// FormTotal es el nombre del Formulario que deberia cambiarlo por la variable formVar, si lo dejo en FormTotal funciona, pero si le cambio a la variable

	frm=document.forms.FormTotal;   // FormTotal debe cambiarse por formVar pero no funciona
	alert(frm.elements.length);  // aqui debo mostrar el numero de elementos, para el ejemplo 3.
}
</script>
</head>

<body>
<form id="FormTotal">
<input type="text" name="t1" />
<input type="text" name="t1" />
<input type="button" onclick="RecorrerForm(this.form)" value="Calcular" />
</form>
</body>
</html> 
Espero alguien me de ideas... Gracias.
  #2 (permalink)  
Antiguo 08/07/2009, 10:29
 
Fecha de Ingreso: febrero-2009
Mensajes: 102
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Cómo pasar Formulario como parametro de una función?

No veo por que tienes que enviar el formulario con el onClick, simplemente en javascript haz :

Código:
document.getElementById("FormTotal");
Y ahí tendrás el formulario. No tienes que complicarte pasandole nada.
  #3 (permalink)  
Antiguo 08/07/2009, 10:39
 
Fecha de Ingreso: noviembre-2008
Mensajes: 89
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Cómo pasar Formulario como parametro de una función?

Paso el formulario como parametro porque es una funcion que voy a utilizar en muchos script con varios formularios a la vez y no siempre tendrán el mismo nombre.

He pensado algo como crear una variable tipo form.

Código:
form formVar=new form();
formVar=formulario;    // formulario es la variable que paso...

// O sea, simplemente estoy especulando sobre el codigo, no se mucho de POO
// en javascript. pero podría ser mas o menos asi... es como cuando uno pasa
// parametros por referencia en Visual.net, no se si aquí se pueda.
Gracia.
  #4 (permalink)  
Antiguo 08/07/2009, 10:42
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Respuesta: Cómo pasar Formulario como parametro de una función?

Hola:

En formulario.name hubieras obtenido ese nombre si lo hubieras declarado, pero solo has declarado el id, así que o declaras ese name, o puedes obtener el id con formulario.id

Lo mismo con la línea:
Código:
frm=document.forms.FormTotal;
... detrás de document.forms solo vale un índice numérico (el equivalente al array de formularios que se corresponda... ) o un índice asociativo... asociado a un atributo name y no a un atributo id.

Creo que demás está decir que esta línea:var
Código:
formVar=document.getElementById(formulario.name);
valdría cambiando el name por "id".

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 08/07/2009, 10:48
 
Fecha de Ingreso: noviembre-2008
Mensajes: 89
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Cómo pasar Formulario como parametro de una función?

Ahora lo tengo asi

Código HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>

<script type="text/javascript">
function RecorrerForm(formulario){
	//  en la parte formulario.name he probado tambien con formulario.id y no funciona
	var formVar=document.getElementById(formulario.id);   

// FormTotal es el nombre del Formulario que deberia cambiarlo por la variable formVar, si lo dejo en FormTotal funciona, pero si le cambio a la variable

	frm=document.forms.formVar;   // formVar no funciona y es supuestamente
// el formulario que paso por parametro, solo me funciona colocandole el FormTotal
// directamente, y lo necesito dinamico con el parametro
	alert(frm.elements.length);  // aqui debo mostrar el numero de elementos, para el ejemplo 3.
}
</script>
</head>

<body>
<form id="FormTotal" name="FormTotal">
<input type="text" name="t1" />
<input type="text" name="t1" />
<input type="button" onclick="RecorrerForm(this.form)" value="Calcular" />
</form>
</body>
</html> 
He puesto el name e id y de todas maneras no funciona.

Alguna Sugerencia???
  #6 (permalink)  
Antiguo 08/07/2009, 10:59
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Respuesta: Cómo pasar Formulario como parametro de una función?

Hola:

Tal vez hayas contestado sin leer mi mensaje, pero vayamos por partes:

con
Código:
var formVar=document.getElementById(formulario.id);
... solo obtienes un identificador, pero simplemente se trata de una cadena de texto, y no un formulario como intentas acceder con
Código:
frm=document.forms.formVar;
...

Te daría la respuesta en código, pero prefiero "enseñar a pescar"...

Prueba usar la variable obtenida en el primer caso directamente... sin el prefijo que usas en el segundo...
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 08/07/2009, 11:13
 
Fecha de Ingreso: noviembre-2008
Mensajes: 89
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Cómo pasar Formulario como parametro de una función?

No he podido.

Intento así:

Código:
document.forms.formulario.elements.length;  // formulario es el parametro que paso
No utilizo la cadena de texto que me devuelve el document.getElementById sino el formulario en si que paso. Pero tampoco me funciona, no te he captado bien caricatos, disculpa y porfavor explicame...

Saludos.
  #8 (permalink)  
Antiguo 08/07/2009, 11: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
Puntos: 1485
Respuesta: Cómo pasar Formulario como parametro de una función?

que alguien me ayude a comprender el tema porque la verdad no lo entiendo! particularmente no comprendo por que obtener una segunda (y/o tercera) referencia del formulario si ya se obtiene una referencia del mismo mediante el argumento de la funcion. es decir, en la funcion todas las variables hacen referencia al mismo elemento:
Código:
function RecorrerForm(formulario){
// parametro formulario es la misma referencia;
var formVar=document.getElementById(formulario.id);   
var frm=document.forms[formulario.name];
// la siguiente linea demuestra que todas las variables hacen referencia al mismo elemento devolviendo true;
alert(formulario == formVar && formVar == frm);
}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 08/07/2009 a las 11:23
  #9 (permalink)  
Antiguo 08/07/2009, 11:24
 
Fecha de Ingreso: noviembre-2008
Mensajes: 89
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Cómo pasar Formulario como parametro de una función?

zerokilled, hola y gracias por responder.

lo que pasa es que deseo una funcion donde se pase como referencia un formulario, para recorrer todos sus elementos o mostrar el numero de elementos que tenga.

Lo cual lo he hecho así:

Código:
function RecorrerForm(formulario){
	
/* FormTotal name o id del formulario, pero pasa que yo deseo
tener la referencia del formulario dinamica
que no sea siempre con FormTotal sino con una variable
en este caso paso como parametro el formulario donde llamo la funcion
*/

// Asi si sirve
	alert(document.forms.FormTotal.elements.length);  // aqui debo mostrar el numero de elementos, para el ejemplo 3.

// Asi No si sirve, se supone que la variable formulario tiene la referencia del Formulario
	alert(document.forms.formulario.elements.length);
}
Gracias...
  #10 (permalink)  
Antiguo 08/07/2009, 11:29
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Respuesta: Cómo pasar Formulario como parametro de una función?

Cita:
Iniciado por ingeday Ver Mensaje
zerokilled, hola y gracias por responder.

lo que pasa es que deseo una funcion donde se pase como referencia un formulario, para recorrer todos sus elementos o mostrar el numero de elementos que tenga.

...

Gracias...
Hola:

Te paso un tuto sobre formularios: El abc de los formularios

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #11 (permalink)  
Antiguo 08/07/2009, 12: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
Puntos: 1485
Respuesta: Cómo pasar Formulario como parametro de una función?

bien, ahora veo donde esta el problema. comparto la misma idea que caricatos... pero no te desanimes.
Cita:
Te daría la respuesta en código, pero prefiero "enseñar a pescar"...

Prueba usar la variable obtenida en el primer caso directamente... sin el prefijo que usas en el segundo...
ya veo donde esta tu confusion y caricatos te ha dado la repuesta, "sin el prefijo que usas en el segundo". lo que sucede es lo siguiente, document.forms es una coleccion de formularios. en tu codigo, la razon por la que funciona document.forms.FormTotal es porque el formulario contiene el atributo name con el valor FormTotal. lo que significa es que si ubicas el nombre del formulario luego de la coleccion javascript buscara algun formulario con dicho nombre.

por tanto, document.forms.formVar no te funciona porque no existe algun formulario con dicho nombre. y es precisamente aqui donde te confunde el entendimiento. formVar es una variable, pero a tu entender en la sintaxis document.forms.formVar tu crees que estas usando la variable como parte de la sintaxis lo cual es incorrecto. en el formato de punto tu no puedes ubicar una variable, para ello se utiliza otra sintaxis "especial". pero sea cual sea el caso, la sintaxis "especial" no te ayudara, mas bien traera mas confusion.

si formVar es una referencia al formulario, no hay necesidad de hacer la referencia larga. es decir, document.forms.FormTotal y formVar hacen referencia al mismo elemento de modo que usando la variable formVar es suficiente para acceder a sus propiedades. eso era lo que caricatos queria decirte.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #12 (permalink)  
Antiguo 08/07/2009, 12:22
 
Fecha de Ingreso: noviembre-2008
Mensajes: 89
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Cómo pasar Formulario como parametro de una función?

Buenas Buenas... Muchas Gracias Caricatos y Zerokilled...

Ya he podido solucionar el problemar y es justo como ustedes dicen, pues si tengo la referencia del formulario en la variable formulario, entonces solo lo hago con fomulario y no tratando de buscar ese formulario como si fuera un nombre en la colección forms.

Solución:

Código:
...
// recibo la variable formulario y 'simplemente' accedo a sus elementos

formulario.elements.length;
...
y...

Cita:
Iniciado por caricatos
Te daría la respuesta en código, pero prefiero "enseñar a pescar"...
La forma de enseñar es muy buena, pues pone a uno a pensar (pescar ideas) aunque a veces no demos xD.

Saludos y gracias nuevamente.

P.D.: Zerokilled de todas maneras me gustaría aprender eso de la sintaxis especial.
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 09:43.