• Publicidad

Funciones JavaScript dentro de otra función

Discute todo acerca de JavaScript así como DHTML o la tecnología AJAX.

Funciones JavaScript dentro de otra función

Notapor zozo666 » 2007-09-22 10:13 @467

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:

Sintáxis: [ Descargar ] [ Ocultar ]
  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:

Sintáxis: [ Descargar ] [ Ocultar ]
  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: Seleccionar todo
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
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Publicidad

Notapor explorer » 2007-09-22 10:53 @495

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):
Sintáxis: [ Descargar ] [ Ocultar ]
  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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor zozo666 » 2007-09-22 11:27 @519

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

Sintáxis: [ Descargar ] [ Ocultar ]
  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;"> 
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Notapor explorer » 2007-09-22 11:50 @534

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor zozo666 » 2007-09-22 12:10 @549

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:

Sintáxis: [ Descargar ] [ Ocultar ]
  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:

Sintáxis: [ Descargar ] [ Ocultar ]
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;
        }      
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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:
Sintáxis: [ Descargar ] [ Ocultar ]
  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().

Sintáxis: [ Descargar ] [ Ocultar ]
  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.
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Notapor explorer » 2007-09-22 17:00 @750

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor zozo666 » 2007-09-23 13:14 @593

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.
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483


Volver a JavaScript

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron