Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Funciones JavaScript dentro de otra función

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Javascript
Mensaje Sab Sep 22, 2007 9:13 am
zozo666
Perlero Frecuente
Perlero Frecuente
Registrado: 26 May 2007
Mensajes: 137
Funciones JavaScript dentro de otra función Responder citando

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:

HTML:
<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:

HTML:
<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
Mensaje Sab Sep 22, 2007 9:53 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4034
Ubicación: Valladolid, España
Responder citando

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):
HTML:
<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;">
Mensaje Sab Sep 22, 2007 10:27 am
zozo666
Perlero Frecuente
Perlero Frecuente
Registrado: 26 May 2007
Mensajes: 137
Responder citando

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?:

HTML:
<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;">
Mensaje Sab Sep 22, 2007 10:50 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4034
Ubicación: Valladolid, España
Responder citando

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.
Mensaje Sab Sep 22, 2007 11:10 am
zozo666
Perlero Frecuente
Perlero Frecuente
Registrado: 26 May 2007
Mensajes: 137
Responder citando

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:

HTML:
if (está válido) {
    exported_func( ['valor','mostrar'], ['resultdiv'];
    cambiarDisplay('scroll','formMensaje','botenv','mensajeok');
}
else {
    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:

Javascript:
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:
HTML:
<form action="" name="frmenv" id="frmenv" method="post">
<textarea style="width:160px; height:100px;" name="val1" id="val1" class="textbox1" cols="10"></textarea>
<input type="radio" value="1" name="calificacion" id="calificacion">1
<input type="radio" value="2" name="calificacion" id="calificacion">2
<input type="radio" value="3" name="calificacion" id="calificacion">3
<input type="radio" value="4" name="calificacion" id="calificacion">4
<input type="radio" value="5" name="calificacion" id="calificacion">5
<input class="boton" type="reset" value="Enviar mensaje" name="cargamensaje" onClick="exported_func( ['val1','calificacion'], ['resultdiv'] ),cambiarDisplay('scroll','formMensaje','botenv','mensajeok');">
</form>


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

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


Con esto creo que queda bien claro lo que tengo que hacer. Muchas gracias nuevamente por tu ayuda.
Mensaje Sab Sep 22, 2007 4:00 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4034
Ubicación: Valladolid, España
Responder citando

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.
Mensaje Dom Sep 23, 2007 12:14 pm
zozo666
Perlero Frecuente
Perlero Frecuente
Registrado: 26 May 2007
Mensajes: 137
Responder citando

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.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Javascript Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group