JavaScript - deleterow

 
Vista:

deleterow

Publicado por pcarvajal (2 intervenciones) el 03/12/2007 14:41:52
Tengo el siguiente código que me agrega y elimina filas a una tabla dinamicamente:
Cita:
<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>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.
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?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:deleterow

Publicado por Carlos Verano (1 intervención) el 11/06/2008 18:12:11
Aquí una forma que te puede ser util...

function fn_delrowtable(e) {
var table = document.getElementById('aux_adjdoc');
var lastRow = table.rows.length;
for( var i = 0; i < lastRow; i++) {
if (i > e){
table.rows[i].cells[0].innerHTML="<img src='a/images/elimina.gif' alt='Eliminar' width='12' height='12' onClick='javascript:fn_delrowtable("+(i-1)+")'>";
}
}
if (lastRow == 1) {
var row = table.insertRow(1);
row.bgColor="#ffffff";

var celda = row.insertCell(0);
celda.className="txtres0";
celda.colSpan="3";
celda.innerHTML="No se ubicaron registros adicionados";
}
table.deleteRow(e);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar