Cita:
El asunto es que, si elimino el ultimo elemento creado y valido las alternativas no hay problemas. Pero si elimino un elemento intermedio y valido las alternativas, se cae.<html>
<head>
<script>
function valida(){
var x=document.frm.cuantos.value;
//deben ser 2 o mas alternativas..
if (x >= 2){
var i;
for (i=1;i<=x;i++){
alert('alternativa_'+i+'-->'+document.getElementById('alternativa_'+i).value );
if(document.getElementById('alternativa_'+i).value ==""){
alert("Debe ingresar el texto de la alternativa");
document.getElementById('alternativa_'+i).focus();
return false;
}
}
}
}
var n=0;
function add() {
n++;
pepe = document.getElementById('tabla');
fila = document.createElement('tr');
fila.id='contenedor'+n;
celda = document.createElement('td');
fila.appendChild(celda);
code=document.createElement('input');
code.type='text';
code.name='alternativa_'+n;
code.id='alternativa_'+n;
code.size='50';
code.maxlength='100';
celda.appendChild(code);
celda = document.createElement('td');
fila.appendChild(celda);
cant=document.createElement('input');
cant.type='button';
cant.value='X';
cant.onclick = function() {del(this.parentNode.parentNode.rowIndex)};
celda.appendChild(cant);
pepe.appendChild(fila);
document.getElementById('cuantos').value = n;
}
function del(obj){
document.getElementById('tabla').deleteRow(obj)
n--;
document.getElementById('cuantos').value = (document.getElementById('cuantos').value-1);
}
</script>
</head>
<body>
<form name="frm">
Total de alternativas:
<input type="text" name="cuantos" value="0" size="3" readonly>
<input class="boton" type="button" value=" + " onclick="add()">
<table>
<tbody id="tabla"> </tbody>
</table>
<input type="button" value="Validar Alternativas" onclick="valida()">
</form>
</body>
</html>
<head>
<script>
function valida(){
var x=document.frm.cuantos.value;
//deben ser 2 o mas alternativas..
if (x >= 2){
var i;
for (i=1;i<=x;i++){
alert('alternativa_'+i+'-->'+document.getElementById('alternativa_'+i).value );
if(document.getElementById('alternativa_'+i).value ==""){
alert("Debe ingresar el texto de la alternativa");
document.getElementById('alternativa_'+i).focus();
return false;
}
}
}
}
var n=0;
function add() {
n++;
pepe = document.getElementById('tabla');
fila = document.createElement('tr');
fila.id='contenedor'+n;
celda = document.createElement('td');
fila.appendChild(celda);
code=document.createElement('input');
code.type='text';
code.name='alternativa_'+n;
code.id='alternativa_'+n;
code.size='50';
code.maxlength='100';
celda.appendChild(code);
celda = document.createElement('td');
fila.appendChild(celda);
cant=document.createElement('input');
cant.type='button';
cant.value='X';
cant.onclick = function() {del(this.parentNode.parentNode.rowIndex)};
celda.appendChild(cant);
pepe.appendChild(fila);
document.getElementById('cuantos').value = n;
}
function del(obj){
document.getElementById('tabla').deleteRow(obj)
n--;
document.getElementById('cuantos').value = (document.getElementById('cuantos').value-1);
}
</script>
</head>
<body>
<form name="frm">
Total de alternativas:
<input type="text" name="cuantos" value="0" size="3" readonly>
<input class="boton" type="button" value=" + " onclick="add()">
<table>
<tbody id="tabla"> </tbody>
</table>
<input type="button" value="Validar Alternativas" onclick="valida()">
</form>
</body>
</html>
Más facil aun:
-Creo los elementos 1,2,3,4 y 5
-Elimino el 3
-Ahora Valido..
como el 3 ya no existe y los restantes despues de él mantuvieron su nombre, el script se cae, porque cuando eliminó un elemento no reasignó los nombres a los elementos restantes para que al recorrerlos por orden los pudiera encontrar. (Vale decir, en este caso se eliminó el 3, el 4 deberia haberse transformado en el 3, el 5 en el 4 y asi sucesivamente hasta no encontrar mas elementos)
Como podría reasignar los nombres a los elementos restantes?