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