Tema: Dom
Ver Mensaje Individual
  #9 (permalink)  
Antiguo 05/11/2004, 02:31
kepawe
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 22 años, 1 mes
Puntos: 5
Hola a todos

Cita:
Iniciado por trovanet
cualquier validación sobre los objetos que alguna vez existieron da error
Trovanet, he tenido el mismo problema en IE, no me deja acceder a los valores y propiedades de los elementos creados, en Mozilla sí.
He conseguido acceder utilizando la sintesis de array del elemento form.

Código PHP:

<html>
<
head>
<
title>Crear un form</title>

</
head>
<
body>
<
div id="selectColour"></div>

<
a href="javascript:void(0)" onclick="create_form()">Crear form</a>
<
script language=JavaScript type=text/javascript>
<!--
var 
colour_op=['Selecciona un color','red','green','yellow'];
// Guardamos aqúi los elementos de formulario creado
var obj_form = new Array()
function 
create_form(){
  
// comprobar que form1 no este creado
  
for(var ct1 = 0 ; ct1 < document.forms.length; ct1++){

    if(
document.forms[ct1].name == "form1"){ return false}
  }
  
// Donde vamos a colocar el formulario
  
var div_select = document.getElementById("selectColour")
  
// Creamos el objeto form
  
var form_node = document.createElement("form")
   
// añadimos el atributo
  
form_node.setAttribute("name","form1")
  
form_node.setAttribute("action","form.php")
  
// añadimos el nodo creado como nodo hijo de div_select
  
div_select.appendChild(form_node)
  
  var 
input_node = document.createElement("input")
   
input_node.setAttribute("type","button")
   
input_node.setAttribute("name","boton")
   
input_node.setAttribute("value","botón")
   
form_node.appendChild(input_node)
   
   var 
select_node = document.createElement("select")

  
select_node.setAttribute("name","select1")

  for(var 
ct = 0; ct < colour_op.length; ct++){

      var 
option_node = document.createElement("option")
      
select_node.appendChild(option_node)
      
option_node.setAttribute("value",colour_op[ct])
      var 
text_node = document.createTextNode(colour_op[ct])
      
option_node.appendChild(text_node)


  }
  
form_node.appendChild(select_node)
  
  
  
  
/* IE solo me ha permitido  acceder a las propiedades
   y valores del select creado  mediante  la sintesis de
   arrays, para poder trabajar más facilmente con los elementos de
   form  los guardo en un array.
  */
  
for(var ct1 = 0 ; ct1 < document.forms.length; ct1++){
    if(
document.forms[ct1].name == "form1"){
      
obj_form[document.forms[ct1].name] = document.forms[ct1]
        for(var 
ct2 = 0; ct2 < document.forms[ct1].elements.length; ct2++){
        
obj_form[document.forms[ct1].elements[ct2].name] = document.forms[ct1].elements[ct2]
        
        
      }
    }
  }
// utilizamos el array creado para trabajar con los elementos form
obj_form["select1"].onchange = show_selectedIndex
 
}

function 
show_selectedIndex(){
  
colourButton = obj_form["select1"].options[obj_form["select1"].options.selectedIndex]
  if(
colourButton.index != 0){
    
obj_form["boton"].style.backgroundColor = colourButton.value
    
  
}
}


//-->
</script>


</body>
</html> 
En cuanto a la perdida de datos, corregirme si me equivoco, solo veo tres posibles soluciones, utilizar cookies, pero claro el usuario lo tiene que tener habilitados. Si trabajas con frames, guardando los datos en unos de los frames, pero si el usario recarga la página los pierdes, o utilizar la propiedad search del objeto location he visto algún ejemplo en el foro.

Espero que te sea util.
Muchas gracias a Caricatos por las direccciones, me están siendo de gran ayuda.


Un saludo a todos