Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Otros Temas » JavaScript » Funciones JavaScript dentro de otra función Responder al tema
Nuevo tema


Página 1 de 1  [ 7 mensajes ] 
 
Nota 2007-09-22 10:13 @467

Perlero Frecuente
Registrado: 2007-05-26 10:36 @483
Mensajes: 139
Funciones JavaScript dentro de otra función
Tengo una duda:
¿Cómo llamo a funciones JavaScript dentro de otra función JavaScript?

Tengo el siguiente problema: yo tenía dos funciones JavaScript que corrían en el onclick de un botón:

Syntax: [ Download ] [ Hide ]
  1. <input class="boton" type="reset" value="Enviar mensaje" name="cargamensaje" onClick="exported_func( ['valor','mostrar'], ['resultdiv'], cambiarDisplay('scroll','formMensaje','botenv','mensajeok');"> 
Bueno, lo que hice a este botón que se encuentra dentro de un formulario fue agregarle otra función que se encarga de validar los campos:

Syntax: [ Download ] [ Hide ]
  1. <input class="boton" type="reset" value="Enviar mensaje" name="cargamensaje" onClick="valida_mensaje(this),exported_func( ['valor','mostrar'], ['resultdiv'], cambiarDisplay('scroll','formMensaje','botenv','mensajeok');"> 
Bueno, ahora el tema es que yo las primeras dos funciones las tengo que ejecutar si el formulario está bien validado, o sea:

Código:
if (está válido) {
    exported_func( ['valor','mostrar'], ['resultdiv'];
    cambiarDisplay('scroll','formMensaje','botenv','mensajeok');
}
else {
    alert("aun no esta validado");
}


¿Se entiende?
O sea, ¿cómo pongo las funciones para que me anden de la misma manera que me andaban en el onclick del botón?

Muchas gracias


Nota 2007-09-22 10:53 @495
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
Creas una nueva función, donde metes la lógica de programa que tu mismo has descrito, precedida por la validación. Y es esa la función que llamas con el onclick.

Puedes también hacer que las funciones devuelvan valores lógicos de verdadero o falso, y luego en el onclick, usar los operadores lógicos and para ejecutar las funciones.

Actualización: mejor usar el operador ternario (no probado):
Syntax: [ Download ] [ Hide ]
  1. <input class="boton" type="reset" value="Enviar mensaje" name="cargamensaje" onClick="( valida_mensaje(this) ) ? exported_func( ['valor','mostrar'], ['resultdiv'] ), cambiarDisplay('scroll','formMensaje','botenv','mensajeok'): return false;"> 

_________________
JF^D Perl programming


Nota 2007-09-22 11:27 @519

Perlero Frecuente
Registrado: 2007-05-26 10:36 @483
Mensajes: 139
Pero, ¿qué tendría que poner en la validación?, o sea está en la función con sus respectivas instrucciones según el IF:

Código:
if (está válido) {
    exported_func( ['valor','mostrar'], ['resultdiv'];
    cambiarDisplay('scroll','formMensaje','botenv','mensajeok');
}
else {
    alert("aun no esta validado");
}


en la parte de exported_func y cambiarDisplay ¿qué pondría para que me ande el operador ternario que me dijiste?:

Syntax: [ Download ] [ Hide ]
  1. <input class="boton" type="reset" value="Enviar mensaje" name="cargamensaje" onClick="( valida_mensaje(this) ) ? exported_func( ['valor','mostrar'], ['resultdiv'] ), cambiarDisplay('scroll','formMensaje','botenv','mensajeok'): return false;"> 


Nota 2007-09-22 11:50 @534
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
Creo que es mejor que saques la lógica de dentro de onclick y la lleves a una función externa. Tendrás más libertad o facilidad para escribir el código.

El cómo se comportan las funciones no lo sé, porque no sé qué es lo que hacen y lo que devuelven.

_________________
JF^D Perl programming


Nota 2007-09-22 12:10 @549

Perlero Frecuente
Registrado: 2007-05-26 10:36 @483
Mensajes: 139
Creo que no me explico bien, no importa lo que hagan las funciones, yo lo que necesito es solamente que lo que estaba antes en el onclick, me haga exactamente lo mismo, pero si está VALIDADO.
Es la siguiente lógica:

Syntax: [ Download ] [ Hide ]
  1. if (está válido) { 
  2. exported_func( ['valor','mostrar'], ['resultdiv']; 
  3. cambiarDisplay('scroll','formMensaje','botenv','mensajeok'); 
  4. else { 
  5. alert("aun no esta validado"); 


Yo quiero que se ejecute las funciones que tengo ahí (exported_func y cambiarDisplay) cuando el formulario está validado, en estos casos no importa que hacen las funciones, lo que necesito es que solamente se ejecuten las funciones de la misma manera que lo hacían cuando no validaba, o sea directamente en el onClick.
¿Qué es lo que tengo que hacer para que las funciones se ejecuten una vez validado el formulario, dónde las llamo? ¿cómo las llamo? Gracias.

Acá dejo el código y remarco la parte donde tendrían que ir las funciones:

Syntax: [ Download ] [ Hide ]
Using javascript Syntax Highlighting
function valida_mensaje(){  
        document.frmenv.val1.value=Trim(document.frmenv.val1.value);
        document.frmenv.calificacion.value=Trim(document.frmenv.calificacion.value);
        //valido el nombre
    if (document.frmenv.val1.value==0){
       alert("Por favor ingrese el mensaje");
       document.frmenv.val1.focus();
           return false;
        }
var pepez=0;
for(i=0; ele=document.frmenv.elements[i]; i++){
        if (ele.type=='radio')
                if (ele.checked)
                {pepez=1;break;}
                }
if (pepez==1)
        {
ACA TENDRIAN QUE IR LAS FUNCIONES, OSEA:
exported_func( ['valor','mostrar'], ['resultdiv'];
    cambiarDisplay('scroll','formMensaje','botenv','mensajeok');
        }else{
                alert('Debe calificar');
                return false;
        }      
}


De esta manera, ¿realizan lo mismo que si las hubiese llamado del onclick? El tema es que yo llamo desde el onclik a la función validar_mensaje que puse arriba, entonces, o me muestra los alert de lo que falta, o me tiene que realizar las funciones que le pedí. ¿Cómo hago esto? Muchas gracias.

Para explicarme mejor te dejo los formularios.
Este es el formulario que anda perfecto, o sea sin validar:
Syntax: [ Download ] [ Hide ]
  1. <form action="" name="frmenv" id="frmenv" method="post"> 
  2. <textarea style="width:160px; height:100px;" name="val1" id="val1" class="textbox1" cols="10"></textarea> 
  3. <input type="radio" value="1" name="calificacion" id="calificacion">1 
  4. <input type="radio" value="2" name="calificacion" id="calificacion">2 
  5. <input type="radio" value="3" name="calificacion" id="calificacion">3 
  6. <input type="radio" value="4" name="calificacion" id="calificacion">4 
  7. <input type="radio" value="5" name="calificacion" id="calificacion">5 
  8. <input class="boton" type="reset" value="Enviar mensaje" name="cargamensaje" onClick="exported_func( ['val1','calificacion'], ['resultdiv'] ),cambiarDisplay('scroll','formMensaje','botenv','mensajeok');"> 
  9. </form> 


Este es el formulario que llama a la función validar_mensaje().

Syntax: [ Download ] [ Hide ]
  1. <form action="" name="frmenv" id="frmenv" method="post"> 
  2. <textarea style="width:160px; height:100px;" name="val1" id="val1" class="textbox1" cols="10"></textarea> 
  3. <input type="radio" value="1" name="calificacion" id="calificacion">1 
  4. <input type="radio" value="2" name="calificacion" id="calificacion">2 
  5. <input type="radio" value="3" name="calificacion" id="calificacion">3 
  6. <input type="radio" value="4" name="calificacion" id="calificacion">4 
  7. <input type="radio" value="5" name="calificacion" id="calificacion">5 
  8. <input class="boton" type="reset" value="Enviar mensaje" name="cargamensaje" onClick="validar_mensaje(this);"> 
  9. </form> 


Con esto creo que queda bien claro lo que tengo que hacer. Muchas gracias nuevamente por tu ayuda.


Nota 2007-09-22 17:00 @750
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
Si está claro...

El evento OnClick llama a la función de validación, y en la parte correspondiente adonde tienes que llamarlas, las pones tal cual. Eso sería suficiente para hacer el mismo papel que hacían antes cuando estaban en el evento. Lo único que has hecho es trasladarlas dentro de una lógica de validación. Llamar a una función JavaScript se realiza de la misma manera en el evento que en una función: invocándola, con sus argumentos.

Lo único que puedo comentarte del código mostrado es que a exported_func le falta el paréntesis de cerrar.

_________________
JF^D Perl programming


Nota 2007-09-23 13:14 @593

Perlero Frecuente
Registrado: 2007-05-26 10:36 @483
Mensajes: 139
Muchas gracias. Ya pude solucionar el problema. En principio había probado de la forma que recién me dijo explorer... pero no anduvo. Ahora que me lo dijiste, explorer, probé de nuevo y anduvo perfecto.


Responder al tema  [ 7 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO