Foros del Web » Programando para Internet » Javascript »

cambiar función js de evento segun select

Estas en el tema de cambiar función js de evento segun select en el foro de Javascript en Foros del Web. Buenas compañeros Tengo este html @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código html: Ver original < SELECT id = "clicon" name = "clicon" >           ...
  #1 (permalink)  
Antiguo 27/10/2008, 02:41
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 15 años, 9 meses
Puntos: 5
cambiar función js de evento segun select

Buenas compañeros

Tengo este html

Código html:
Ver original
  1. <SELECT id="clicon" name="clicon">
  2.           <OPTION value="CO" onclick="javascript:asignaFuncion('funcion1(arg1,arg2,...,argX);');" SELECTED>Contacto&nbsp;&nbsp;</OPTION>
  3.           <OPTION value="CL" onclick="javascript:asignaFuncion('funcion2(arg1,arg2,...,argX);');">Cliente&nbsp;&nbsp;</OPTION>
  4.         </SELECT>
  5.  
  6. <INPUT type="text" id="nom_clicon" SIZE="35" MAXLENGTH="35" value="" onclick="funcion1(arg1,arg2,...,argX);"/>

lo que necesito es que cuando se seleccione una opción del select se actualice el onclick en el input text. Que intrucciones debería poner en la función asignaFuncion()

Muchas gracias

Saludos
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!
  #2 (permalink)  
Antiguo 27/10/2008, 08:24
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: cambiar función js de evento segun select

Primero que nada, te aconsejo usar el evento onSubmit del select, no el evento onclick de cada opción.

Luego, dado que Javascript es funcional, lo que pedís es bastante simple.

Código html:
Ver original
  1. <SELECT id="clicon" name="clicon" onsubmit="aplicacion.asignar(this.value)">
  2.           <OPTION value="CO" SELECTED>Contacto&nbsp;&nbsp;</OPTION>
  3.           <OPTION value="CL">Cliente&nbsp;&nbsp;</OPTION>
  4.         </SELECT>
  5.  
  6. <INPUT type="text" id="nom_clicon" SIZE="35" MAXLENGTH="35" value="" onclick="aplicacion.asignada(arg1,arg2,...,argX);"/>

Código javascript:
Ver original
  1. <script>
  2. aplicacion = {
  3.     funcion1 : function() {
  4.         // lo que querés que haga la funcion1
  5.     },
  6.  
  7.     funcion2 : function() {
  8.         // lo que querés que haga la funcion2
  9.     },
  10.  
  11.     asignada : funcion1, // por defecto, usar la funcion1
  12.  
  13.     asignar : function(valor) {
  14.         if (valor == 'CO') {
  15.             aplicacion.asignada = aplicacion.funcion1;
  16.         } else  if (valor == 'CL') {
  17.             aplicacion.asignada = aplicacion.funcion2;
  18.         }
  19.     }
  20. };
  21. </script>
  #3 (permalink)  
Antiguo 27/10/2008, 09:48
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: cambiar función js de evento segun select

Primero de todo, gracias por contestar

traslade el código a un archivo

Código html:
Ver original
  1. aplicacion = {
  2.     funcion1 : function() {
  3.         // lo que querés que haga la funcion1
  4.         alert('funcion1');
  5.     },
  6.  
  7.     funcion2 : function() {
  8.         // lo que querés que haga la funcion2
  9.         alert('funcion2');
  10.     },
  11.  
  12.     asignada : funcion1, // por defecto, usar la funcion1
  13.  
  14.     asignar : function(valor) {
  15.         if (valor == 'CO') {
  16.             aplicacion.asignada = aplicacion.funcion1;
  17.         } else  if (valor == 'CL') {
  18.             aplicacion.asignada = aplicacion.funcion2;
  19.         }
  20.     }
  21. };
  22. <SELECT id="clicon" name="clicon" onsubmit="aplicacion.asignar(this.value)">
  23.           <OPTION value="CO" SELECTED>Contacto  </OPTION>
  24.           <OPTION value="CL">Cliente  </OPTION>
  25.         </SELECT>
  26.  
  27. <INPUT type="text" id="nom_clicon" SIZE="35" MAXLENGTH="35" value="" onclick="aplicacion.asignada();"/>

me da el siguiente error el firebug del firefox

funcion1 is not defined
PRUEBA_SELCLICON()()PRUEBA_SELCLICON (línea 13)
[Break on this error] asignada : funcion1, // por defecto, usar la funcion1

Por otroladomesurge la duda de como pasar los parametros a las funciones,ya que en una llamada son unos y en otra otros.

Gracias alvlin
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!
  #4 (permalink)  
Antiguo 27/10/2008, 09:59
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: cambiar función js de evento segun select

en la línea 112, debería ser

Código javascript:
Ver original
  1. asignada : aplicacion.funcion1

En cuanto a los parámetros, ya depende de cuáles sean cuál es la mejor forma de obtenerlos.


Saludos.
  #5 (permalink)  
Antiguo 27/10/2008, 11:41
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: cambiar función js de evento segun select

Hice el cambio y ahora me da este error

aplicacion is not defined
PRUEBA_SELCLICON()()PRUEBA_SELCLICON (línea 13)
[Break on this error] asignada : aplicacion.funcion1, // por defecto, usar la funcion1

Muchas gracias por la molestia que te estas tomando

Saludos
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!
  #6 (permalink)  
Antiguo 27/10/2008, 12:35
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: cambiar función js de evento segun select

Si, bueno, tenía algunos errores de lógica
También te comenté mal el evento que tenés que usar, debería ser onchange y no onsubmit (este último es solamente para formularios)

También voy a explicar un poco lo que hace el código

1.- El motivo para declarar un objeto "aplicacion" es evitar las variables globales. Usando un objeto para alojar tus funciones y variables, no usás más que 1 variable global.

2.- Al momento de la carga de la página se asignan aplicacion.lista y aplicacion.campoTexto, para que correspondan al select y a la caja de texto, respectivamente.
Luego se les asignan los eventos correspondientes.
A la lista se le asigna una función que cambiará el manejador de eventos de la caja de texto según su valor, y también se ejecuta esa funcion para que la caja tenga una función inicial.

3.- El resto es igual que antes, si tenés alguna duda simplemente preguntá. Traté de hacer un código JS correcto, no invasivo (separado del HTML) y que siga las buenas prácticas de javascript. Aunque eso requiera utilizar algunas variables de más.
Código javascript:
Ver original
  1. var aplicacion = {
  2.  
  3.     campoTexto : null,
  4.     lista : null,
  5.  
  6.     funcion1 : function() {
  7.         // lo que querés que haga la funcion1
  8.         alert('funcion1');
  9.     },
  10.  
  11.     funcion2 : function() {
  12.         // lo que querés que haga la funcion2
  13.         alert('funcion2');
  14.     },
  15.  
  16.     asignarFuncion : function() {
  17.         var valor = aplicacion.lista.value;
  18.  
  19.         if (valor === 'CO') {
  20.             aplicacion.campoTexto.onclick = aplicacion.funcion1;
  21.         } else  if (valor === 'CL') {
  22.             aplicacion.campoTexto.onclick = aplicacion.funcion2;
  23.         }
  24.     },
  25.    
  26.     asignarEventos : function() {
  27.         aplicacion.lista.onchange = aplicacion.asignarFuncion;
  28.         aplicacion.asignarFuncion();
  29.     }
  30. };
  31.  
  32. window.onload = function() {
  33.     aplicacion.campoTexto = document.getElementById('nom_clicon');
  34.     aplicacion.lista = document.getElementById('clicon');
  35.     aplicacion.asignarEventos();
  36. }

El HTML ya no necesita javascript:
Código HTML:
<SELECT id="clicon" name="clicon">
          <OPTION value="CO" SELECTED>Contacto  </OPTION>
          <OPTION value="CL">Cliente  </OPTION>
        </SELECT>
 
<INPUT type="text" id="nom_clicon" SIZE="35" MAXLENGTH="35" value="" /> 

Saludos.
  #7 (permalink)  
Antiguo 28/10/2008, 05:48
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: cambiar función js de evento segun select

Muchas gracias tio por tu paciencia y buen hacer.

Me ha sido de gran ayuda, y no sólo para mi aplicación,también para entender un poco más js con objetos, ¿Asi se programa Js Orientado a Objetos?

Gracias de veras, Saludos
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!
  #8 (permalink)  
Antiguo 28/10/2008, 06:31
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: cambiar función js de evento segun select

Es que JS es orientado a objetos, es difícil escaparse.

Esta es una forma "pura" de POO en Javascript, hay muchas otras formas que intentan convertirlo en algo similar a Java, que personalmente no me gustan. Pero como siempre cada maestrito con su librito: otras personas podrían ver este código y considerarme un hereje

Si podés leer en inglés, te recomiendo este sitio creado por Douglas Crockford, el "Senior Javascript Architect" de Yahoo!: http://www.crockford.com/
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 13:07.