Ver Mensaje Individual
  #12 (permalink)  
Antiguo 25/01/2007, 19:15
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 1 mes
Puntos: 45
Re: Cómo transformar objetos del formulario? (text a checkbox, text a hidden)

Ya tengo la respuesta de select>>radio, pero tiene unos pequeños apaños para que el señor Internet Explorer nos haga un poquito de caso. Uno es al checkear los radios, y otro es para, simplemente, colocarlos.

Código PHP:
<p id="parrafo">
    <
select id="elSelect">
        <
option value="1">Casa</option>
        <
option value="1">Coche</option>
        <
option value="1">Cartera</option>
        <
option value="1">Llave</option>
        <
option value="1">Bombilla</option>
        <
option value="1">Interruptor</option>
    </
select>
    <
input type="button" value="cambia" onclick="cambiar()" />
</
p>


<
script>

var 
elParrafo=document.getElementById("parrafo");
var 
esSelect=true;

function 
cambiar() {
    if(
esSelect) {
        var 
elSelect=document.getElementById("elSelect");
        var 
opciones=elSelect.options;
        var 
padre=document.createElement("P");
        
padre.id="padre";
        for(var 
a=0a<opciones.lengtha++) {            //un radio por cada opcion
            
try{
                var 
radio=document.createElement('<input type="radio" name="deSelect" value="'+opciones[a].value+'" />');
            } catch(
err) {
                var 
radio=document.createElement("INPUT");
                
radio.type="radio";
                
radio.name="deSelect";
                
radio.value=opciones[a].value;
            }
            if(
elSelect.options.selectedIndex==a)
                    var 
iSeleccionado=a;
            
padre.appendChild(radio);
            
padre.appendChilddocument.createTextNode(opciones[a].text) );
            
padre.appendChilddocument.createElement("BR") );
        }
        
elParrafo.replaceChild(padreelSelect);
        
padre.childNodes[iSeleccionado*3].checked=true;        //marcar el seleccionado (despues de replaceChild, si no en IE no funciona)
    
}
    else {
        var 
padre=document.getElementById("padre");
        var 
hijos=padre.childNodes;
        var 
elSelect=document.createElement("SELECT");
        
elSelect.id="elSelect";
        for(var 
a=0a<hijos.lengtha++) {            //recorremos los hijos
            
if( hijos[a].tagName=="INPUT" && hijos[a].type=="radio" ) {        //que solo sean radios
                
elSelect.optionselSelect.options.length ]=new Optionhijos[a].nextSibling.datahijos[a].value );
                if( 
hijos[a].checked )                                        //marcar el seleccionado
                    
elSelect.optionselSelect.options.length-].selected=true;
            }
        }
        
elParrafo.replaceChild(elSelectpadre);    
    }
    
esSelect=!esSelect;
}


</script> 
Ya veis que hay que hacer la chapuza de marcar el radio después de adjuntarlo al documento para que el dichoso explorer lo consiga digerir (http://www.subflash.com/foro/viewtopic.php?t=7853).

Otra chapuza que hay que hacer para que el IE trague es ese try & catch que seguro que os ha chocado. Bueno, resulta que si añadimos radios al documento con IE usando el método tradicional se añaden, es cierto, pero son totalmente impracticables. Me explico: No están disabled, pero no se pueden checkear.

Así que encontré la solución por google también y todos contentos (http://cf-bill.blogspot.com/2006/03/...y-created.html)



Bueno, me ha funcionado tanto en IE como en FF.


Respecto al select>>checkboxes supongo que será parecido, a ver si alguien se atreve, que a mi los select múltiples me intimidan más.



Un saludo y espero aportar más cosas.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.