Comunidad de diseño web y desarrollo en internet online

MC con 2 botones dentro que actuan como radiobutton(rallada)

Citar            
MensajeEscrito el 13 Nov 2009 07:07 pm
Hola a todos

Me estoy volviendo loco con un problema que seguro es fácil de resolver, pero yo no hago más que enredar al buscar una solución.

Tengo un formulario, con varios pares botón SINO-TextArea.

¿Qué es un botón SINO?
La idea es que el "botón SINO" tenga 2 opciones (SI / NO) y sea como similar a un radiobutton, es decir, si se selecciona SI aparece el TextArea asociado (para que el usuario escriba datos) y si se selecciona el NO desaparece el TextArea. Se pueden tener ambos a la vez sin seleccionar, pero no se puede tener ambas opciones a la vez en SI, sólo una.

Como no me gustan los radiobuttons 'de serie', quise crear el mío propio.

Creé 4 botones normales que sólo tienen 1 estado (SI seleccionado, SI sin seleccionar, No seleccionado, No sin seleccionar). La diferencia entre seleccionado y sin seleccionar es simplemente visual (color de fondo y de borde).

Luego creé un movieclip SINO con 3 estados ( ninguno, SI seleccionado, NO seleccionado) y puse los botones anteriormente creados tal que así:

frame1 ('_ninguno'): El estado 'ninguno' tiene un botón SI no seleccionado y un botón NO no seleccionado // opcion='ninguna'.
frame2 ('_si'): El estado 'SI' tiene un botón SI seleccionado y un botón NO no seleccionado // opcion='SI'.
frame3 ('_no'): El estado 'NO' tiene un botón SI no seleccionado y un botón NO seleccionado // opcion='NO'.

Tengo una variable local al boton (llamada opcion) que guarda el estado (con el valor que veis arriba).
A parte, cada subbotón interno tiene código propio, así que si tenemos p.e. el SINO en el frame1 (donde no hay nada seleccionado) y hago clic en el botón interno si, ejecuto este código:

on(release)
{
gotoAndStop('_si');
}

Es decir, simplemente salta al frame 2, por lo que parece que se active el subbotón SI.

Lo cierto que es más sencillo verlo que explicarlo!! (si quereis posteo el boton)

En fin, el problema.
Ahora quisiera implementar la funcionalidad que hace aparecer y desaparecer el TextArea.
No consigo hacerlo, ya que "desde fuera" no se diferenciar cuando hago clic en los subbotones internos.
Además si meto código, parece que "se desactive" el interno y ya no cambia de estado.

Vaya tocho, espero que se entienda jeje

Por daniel69

78 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Nov 2009 01:57 pm
Vaya tocho, espero que se entienda jeje


Cuando hay falta de síntesis demuestra falta de foco. Si logras explicar tu problema en 10 líneas, tendrás realmente una pregunta ;)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Nov 2009 11:49 pm
Tienes razón solisarg. Lo intento de nuevo:
He creado un movieclip con 2 botones dentro (boton SI y boton NO), de forma que o está activado uno o lo está el otro.
Para ello utilizo código asociado a cada botón, que hace que si pulsas uno, se desactiva el otro (en realidad lo que hace es cambiar el estado de los 2 botones).
Creo instancias de ese movieclip (llamado "botón SINO", aunque es un movieclip no un botón) y quiero que cuando esté activado el SI otro objeto (textarea) se haga visible. Y si pulso NO, que se haga invisible.
Problema: no puedo / no se distinguir qué botón de los 2 he pulsado (botón SI o botón NO) desde el "programa principal".
Es más, cuando asocio código a una instancia, parece como si dejase de funcionar el ćodigo 'interno' de cada botón.
A ver si mañana tengo un rato y subo un ejemplo para que lo veáis, ya digo que es una chorrada seguro, pero no me sale.

Por daniel69

78 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Nov 2009 07:35 am
Adjunto un fichero con el ejemplo.
http://www.megaupload.com/?d=9RKPR8AH

hay 2 botones SINO

El primero tal cual, para que veais cómo funciona
El segundo con código, para que veais que no me va :(

Por daniel69

78 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Nov 2009 12:00 pm
El MovieClip contenedor debería tener dos instancias de tu botón, que en realidad es un MC con dos frames, uno para seleccionado el otro para no (como un checkbox) EN el code del contenedor

Código ActionScript :

botonSI.onPress = function(){
  this.gotoAndStop(2)
  botonNo.gotoAndStop(1)
  alguntextArea.visible = true
}
botonNo.onPress = function(){
  this.gotoAndStop(2)
  botonSi.gotoAndStop(1)
  alguntextArea.visible = false
}


El nombre de iunstancia de uno de los botones es botonSI, el otro botonNo, algunTextArea se refiere al componente que quieres ocultar/mostrar
Personalmente no miro archivos ( http://foros.cristalab.com/baja-y-arregla-mi-archivo-t56378/ )

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 16 Nov 2009 01:10 pm
Ok, mirare a ver si lo consigo con lo que me has dicho.

Por daniel69

78 de clabLevel



 

msie7
Citar            
MensajeEscrito el 08 Dic 2009 01:26 am
hola a todos

Refloto el hilo porque he vuelto a este problema que no consigo arreglar.
Lo he simplificado para ir poco a poco resolviendo los problemas que me van surgiendo.

Tengo un movieclip con varios botones y varios TextInputs.

boton01 TextInput01
boton02 TextInput02

Cada botón en realidad son 2 botones (un botón SI y uno NO).
Si pulsamos SI debe hacerse visible el TextInput correspondiente, si pulsamos NO debe hacerse invisible.
He hecho una función para los botones, que debe hacer visible o invisible los TextInputs, pero no va.
Vamos a ignorar cómo van los botones, pero digamos que al pulsarlos llaman a la siguiente función (declarada en el 1er frame) con la opción elegida (SI,NO) y el botón (01,02)
A ver si podeis ayudarme, no entiendo porqué flash me ignora XD

Código :

//botones SINO
attachMovie("SINO", "SINO01_mc",1);
attachMovie("SINO", "SINO02_mc",2);
SINO01_mc._y=5;
SINO02_mc._y=45;

//cajas de input Text
attachMovie("TextInput", "TextInput01_mc",3);
attachMovie("TextInput", "TextInput02_mc",4);
TextInput01_mc.move( 200, 5); 
TextInput01_mc._width=200; 
TextInput01_mc._height=30;
TextInput01_mc._visible=false;
TextInput02_mc.move( 200, 53); 
TextInput02_mc._width=200; 
TextInput02_mc._height=30;
TextInput02_mc._visible=false;

//eventos de los botones
pulsarBotonSINO = function( sOpcion, sNum )
{
   
   if( sOpcion == "si" )
   {
      trace("Elegiste si!!!");

      var aa="TextInput"; //construyo el elemento a hacer visible
      var bb="_mc";
      var cc= aa + sNum + bb; 
      trace(cc);
      cc._visible=true;
                           
   }
   else if( sOpcion == "no" )
   {
      trace("Elegiste no!!!");

      var aaa="TextInput";  //construyo el elemento a hacer invisible
      var bbb="_mc";
      var ccc= aaa + sNum + bbb;
      trace(ccc);
      ccc._visible=false;                                                
   }   

   var aaaa="SINO";
   var bbbb="_mc";
   var cccc= aaaa + sNum + bbbb;
   trace(cccc);
   cccc.gotoAndStop( "_"+sOpcion );                                          
}


El caso es que no funciona, no hace visibles los TextInputs nunca, pero los trace aparentemente están bien.
Es decir, para cuando pulso el botón SI del primer botón, éste devuelve sOpcion="si" y sNum="01", con lo cual se debería construir la siguiente sentencia:
TextInput01_mc.visible=true;

No se si el problema es que no se pueden hacer estas cosas a la hora de utilizar _visible.

Por daniel69

78 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Dic 2009 01:41 am
Vale, de casualidad he puesto

this[cc]._visible=true; en vez de cc._visible=true; (y lo mismo para el false) y FUNCIONA!!

Ahora he metido todos los botones y textInputs DENTRO de un componente Accordion.
Problema. Al parecer el this si funciona si todos los objetos están en el frame, pero dentro del accordion supongo que el this se refiere al propio accordion y ya no va.

Os pongo el código

Código :

//Atacheamos el componente
attachMovie("Accordion", "miAcordeon", 1);
//Propiedades del componente
miAcordeon.setSize(500, 375);
miAcordeon.move(20, 20);
//Le ponemos las opciones del menú
miAcordeon.createChild("View", "opcion1", {label: "1ª PAGINA"});
miAcordeon.createChild("View", "opcion2", {label: "2ª PAGINA"});
miAcordeon.createChild("View", "opcion3", {label: "3ª PÁGINA"});
//------------primer menu------------------------------------//
//botones SINO
miAcordeon.opcion1.createChild("SINO", "SINO01_mc");
miAcordeon.opcion1.createChild("SINO", "SINO02_mc");
miAcordeon.opcion1.SINO01_mc.move( 40, 5); 
miAcordeon.opcion1.SINO02_mc.move( 40, 45);
//cajas de input Text
miAcordeon.opcion1.createChild("TextInput", "TextInput01_mc");
miAcordeon.opcion1.createChild("TextInput", "TextInput02_mc");
miAcordeon.opcion1.TextInput01_mc.move( 200, 5); 
miAcordeon.opcion1.TextInput01_mc._width=200; miAcordeon.opcion1.TextInput01_mc._height=30;
miAcordeon.opcion1.TextInput01_mc._visible=false;
miAcordeon.opcion1.TextInput02_mc.move( 200, 53); 
miAcordeon.opcion1.TextInput02_mc._width=200; miAcordeon.opcion1.TextInput02_mc._height=30;
miAcordeon.opcion1.TextInput02_mc._visible=false;

//eventos de los botones
pulsarBotonSINO = function( sOpcion, sNum )
{
   trace( 'sOpcion '+sOpcion );
   trace( 'sNum    '+sNum );
   
   if( sOpcion == "si" )
   {
      trace("Elegiste si!!!");

      var aa="miAcordeon.opcion1.TextInput";
      var bb="_mc";
      var cc= aa + sNum + bb;
      trace(cc);
      this[cc]._visible=true;
                           
   }
   else if( sOpcion == "no" )
   {
      trace("Elegiste no!!!");

      var aaa="miAcordeon.opcion1.TextInput";
      var bbb="_mc";
      var ccc= aaa + sNum + bbb;
      trace(ccc);
      this[ccc]._visible=false;                                                
   }   

   //this[ "SINO"+sNum+"_mc" ].gotoAndStop( "_"+sOpcion ); //NO FUNCIONA
   //c.opcion1.SINO01_mc.gotoAndStop( "_"+sOpcion ); // Y TENGO QUE USAR ESTA MIERDA
                                          //y solo sirve para el 1er boton
   var aaaa="miAcordeon.opcion1.SINO";
   var bbbb="_mc";
   var cccc= aaaa + sNum + bbbb;
   trace(cccc);
   this[cccc].gotoAndStop( "_"+sOpcion );   );                                          
}



Como veis, un componente de dentro del accordion se llama poniendo:

miAcordeon (nombre del accordion) + opcionX (pestaña del accordion, en este caso todo en la 1) + objeto.

Pero claro,

Código :

var aa="miAcordeon.opcion1.TextInput";
var bb="_mc";
var cc= aa + sNum + bb;
trace(cc);
this[cc]._visible=true;


esto no va a funcionar porque el this se refiere a sí mismo. No se, cómo me refiero a ese componente ¿?
He probado a ponerlo directamente ( miAcordeon.opcion1.TextInput01_mc._visible=true; ) y funciona perfecto, pero claro, no voy a crear una función para cada botón. ¿sabeis qué puede ser?

Gracias

Por daniel69

78 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Dic 2009 12:13 pm
Si buscas un elemento dentro de otro haz

miAcordeon{cc}

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 09 Dic 2009 12:29 am
Hola solisarg

Me da error de sintaxis al utilizar los { }

He probado también con

Código :

miAcordeon[cc]._visible=true;


no da error pero 'no se entera'.

Por daniel69

78 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Dic 2009 12:32 am
Ya está!

Me contesto a mi mismo:

Código :

var aa="TextInput";
var bb="_mc";
var cc= aa + sNum + bb;

miAcordeon.opcion1[cc]._visible=true;


Es decir, por algún motivo no funciona poniendo opcion1 dentro del cc, lo cual me obliga a hacer una función por pestaña del accordion, pero ya voy viendo la luz.

Una vez más, gracias soliarg!

Por daniel69

78 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.