Foros del Web » Programando para Internet » Javascript »

Llamar a una 'function' desde otra 'function'

Estas en el tema de Llamar a una 'function' desde otra 'function' en el foro de Javascript en Foros del Web. Hola a tod@s, Estoy intentando crear un formulario dinámico y tengo problemas con los eventos. El formulario, resumidamente, está formado por un textfield en el ...
  #1 (permalink)  
Antiguo 01/02/2008, 04:43
lfc
 
Fecha de Ingreso: febrero-2008
Mensajes: 23
Antigüedad: 16 años, 3 meses
Puntos: 0
Llamar a una 'function' desde otra 'function'

Hola a tod@s,

Estoy intentando crear un formulario dinámico y tengo problemas con los eventos.

El formulario, resumidamente, está formado por un textfield en el que el usuario entra un numero y se añaden tantos 'divs' como indique este numero, y cada div tiene, a su vez, otros elementos típicos de un formulario (divs, textfields, comboboxes, datetimepicker...). A su vez, cada uno de estos divs nuevos generados también pueden contener otro textfield que al inserir un numero se añaden más divs... y así sucesivamente.

El problema que tengo es que a un textfield generado dinámicamente (con una function resultado del evento del primer textfield) no le puedo añadir un evento 'onkeyup' y asociarle una function definida en el mismo archivo... solo me funciona si defino la neva 'function' dentro de la primera 'function'...

--> Alguien me podría decir como llamar a una function dentro de otra function???

Estoy desesperada!!! Necesito ayuda!!!

MUCHAS GRACIAS!!!
  #2 (permalink)  
Antiguo 01/02/2008, 05:08
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 2 meses
Puntos: 62
Re: Llamar a una 'function' desde otra 'function'

Código:
function uno()
 {
   dos()
 }
function dos()
 {
 }
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #3 (permalink)  
Antiguo 01/02/2008, 05:48
lfc
 
Fecha de Ingreso: febrero-2008
Mensajes: 23
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Llamar a una 'function' desde otra 'function'

Muchas gracias por responder tan rápido!

Pero el problema creo que no es tan fácil de resolver...

Te pongo un trozo del código del formulario (una parte del formulario) a ver si ves donde puede estar mi error... supongo que el hecho que use struts2 no tendrá nada que ve, no?

Código:
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>

	<head>
		<title>ARS - Is Available Form</title>
		<s:head theme = "ajax"/>
		<link href="<s:url value="/css/mainstyle.css"/>" rel="stylesheet" type="text/css"/>
		
		<script language="javascript" type="text/javascript">
			
			function addtordiv(obj)
			{
				alert("checkbox pressed");
			}
			
			// onkeyup -> create a DIV for each service
			function addDivsServices(event)
			{
				numS = parseInt(document.formreservation.numservices.value);
					
				divservices = document.createElement('div');
				divservices.id = 'divservices';
				divservices.style.border = "solid #00bfff 3px";
				divservices.style.padding = "5px";
				(document.getElementById('formreservation')).appendChild(divservices);
					
				for(i = 0; i < numS; i++) 
				{							
					//THE DIV OF THE SERVICE -> name: 'divservice' + i
					divservice = document.createElement('div');
					divservice.id = 'divservice' + i;
					divservice.style.border = "solid #00cd00 3px";
					divservice.style.padding = "5px";
					divservice.appendChild(document.createElement('br'));
					
					//SERVICE ID
					txt = document.createTextNode('Service ID: ');
					serviceid = document.createElement('input');
				        serviceid.name = 'serviceid' + i;
    				        divservice.appendChild(txt);
				        divservice.appendChild(serviceid);
				    
				        //SPACE
				        space = document.createTextNode("\u00a0");
				        divservice.appendChild(space);
					
					//COMBOBOX TYPE OF RESERVATION
					txt = document.createTextNode('Type of Reservation: ');
					cbx = document.createElement('select');
					cbx.name = 'tor' + i;
					
					opt = document.createElement('option');
					opt.value = 'type1';
					opt.text =  'type1';
					cbx.appendChild(opt);
					
					opt = document.createElement('option');                     
					opt.value = 'type2';
					opt.text =  'type2';
					cbx.appendChild(opt);
					
					opt = document.createElement('option');                     
					opt.value = 'type3';
					opt.text =  'type3';
					cbx.appendChild(opt);
					cbx.onchange = 'addDivTor()';
									
					divservice.appendChild(txt);
					divservice.appendChild(cbx);
					
					//NEW LINE
					divservice.appendChild(document.createElement('br'));
					divservice.appendChild(document.createElement('br'));
					
					//DIV ToR
					divtor = document.createElement('div');
					divtor.id = 'divtor' + i;
					divtor.style.border = "solid #ff83fa 3px";
					divtor.style.padding = "5px";
					divservice.appendChild(divtor);
					divservice.appendChild(document.createElement('br'));
					
				        divservices.appendChild(divservice);
				}
					
			}
		</script>
		
	</head>
	
	<body>
		<h1> Is Available </h1>
		<br>
		<s:form name = "formreservation" id = "formreservation">
			<s:textfield name = "numservices" label = "Number of services" onkeyup = "addDivsServices(event)"/><br>
		</s:form>
	</body>
</html>
La función 'addtordiv' es llamada des del combobox cuando se selecciona alguna opción. Pero no funciona, al seleccionar algun elemento del combobox tendría que salir el 'alert' pero no sale.

Muchas gracias!!!
  #4 (permalink)  
Antiguo 01/02/2008, 06:42
 
Fecha de Ingreso: febrero-2005
Mensajes: 44
Antigüedad: 19 años, 3 meses
Puntos: 1
Re: Llamar a una 'function' desde otra 'function'

Hola!

Yo sólo veo que una vez creados todos los option del select, le incluyes el evento onchange al select con la función 'addDivTor()', y no la addtordiv que tienes definida al principio.... no sé si será ese el error....

Saludos!
  #5 (permalink)  
Antiguo 01/02/2008, 07:01
lfc
 
Fecha de Ingreso: febrero-2008
Mensajes: 23
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Llamar a una 'function' desde otra 'function'

Si, tienes razón, perdona, ya me he dado cuenta de eso y ya lo he cambiado, pero sigue sin funcionar. He probado de poner la declaración de la function 'addDivTor' antes de la de 'addDivsServices' y también después, pero nada, no hay manera.

El problema debe estar en la manera de declarar el evento... pero es que no hay manera de que encuentre en ningún sitio como hacerlo, todos los ejemplos de eventos que he visto están declarados en el código html, no en el javascript... :(
  #6 (permalink)  
Antiguo 01/02/2008, 07:59
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 9 meses
Puntos: 5
Re: Llamar a una 'function' desde otra 'function'

Hola lfc y compañía.

Prueba a ver si así te funciona:

Código:
cbx.onchange = addtordiv;
Salu2
  #7 (permalink)  
Antiguo 01/02/2008, 08:21
lfc
 
Fecha de Ingreso: febrero-2008
Mensajes: 23
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Llamar a una 'function' desde otra 'function'

SIII!!!! Esto ha funcionado!!!

Pero ahora me viene otra duda... obviamente no quiero hacer un solo alert dentro la función, sinó que quiero insertar elementos de formulario dentro del div 'divtor'. En concreto, me gustaría poner el siguiente codigo dentro de la función 'addDivTor':

Código:
function addtordiv(obj)
{				
	divdest = obj.nextSibling.nextSibling.nextSibling;
	iaux = parseInt((divdest.id).substring(6));
				
	//If there was something inside the div, delete it
	if (divdest.hasChildNodes())
	{
		while (divdest.hasChildNodes())
		{
			divdest.removeChild(divdest.firstChild);
		}
	}
				
	val = obj.options[obj.options.selectedIndex].value;
		
	txt = document.createTextNode('Start Time: ');
	divdest.appendChild(txt);
	st = document.createElement('input');
	st.name = 'text_field';
	st.value = '';
	divdest.appendChild(st);
	divdest.appendChild(document.createTextNode("\u00a0"));
	myImg = document.createElement('img');
	myImg.src = 'date-icon.gif';
	myImg.width = 18;
	myImg.height = 18;
	myImg.border = 0;
	myImg.alt = 'Pick a date';
	divdest.appendChild(myImg);
}
donde obj es el elemento que ha provocado el event (en este caso el combobox), pero resulta que claro, me dice que obj no está definido... Como puedo acceder al objeto que lanza el evento???

muchas gracias!
  #8 (permalink)  
Antiguo 01/02/2008, 09:26
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 9 meses
Puntos: 5
Re: Llamar a una 'function' desde otra 'function'

Me alegro .

El primer argumento que se envía a addtordiv es el objeto Event, menos en IE, y el objeto que lanza el evento es asignado a this.

Código:
function addtordiv(event){

        var event = event || window.event;	
	var object = this;	

}

Espero que te sirva, tengo por ahí un enlace que ahora mismo no encuentro que explica muy bien como trabajar con eventos en JavaScript, cuando pueda te lo envió.
Salu2
  #9 (permalink)  
Antiguo 04/02/2008, 02:05
lfc
 
Fecha de Ingreso: febrero-2008
Mensajes: 23
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Llamar a una 'function' desde otra 'function'

Si que me ha servido!!! Muchas gracias!!!
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 20:31.