Ver Mensaje Individual
  #5 (permalink)  
Antiguo 26/08/2011, 13:28
Avatar de laratik
laratik
 
Fecha de Ingreso: mayo-2010
Ubicación: Cali
Mensajes: 317
Antigüedad: 13 años, 11 meses
Puntos: 63
Respuesta: No me elimina campos

Si entiendo bien tu duda, lo que quieres es que al eliminar un elemento con su id, este no se pierda, si no que al volver a crear un nuevo elemento este se cree con el id que se perdió. Para el caso especifico que planteas:

Cita:
Iniciado por isc_seeker Ver Mensaje
excelente :) gracias ! solo que ahora me salio que al eliminar los datos, el cliclo continua, por lo que la numeración sigue su curso, es decir, tengo 5 elementos, 1,2,3,4 y 5 y cuando elimino el 5 por ejemplo, y le doy en Nuevo otra vez, comienza a crear a partir de 6... alguna forma de que continue con el numero que le sigue ?
Puedes probar lo siguiente:

Código Javascript:
Ver original
  1. <script>
  2. var num =1;
  3. function addElement() {
  4.     var ni = document.getElementById('myDiv');
  5.     var newdiv = document.createElement('div');
  6.     var divIdName = 'numero'+num+'';
  7.     newdiv.setAttribute('id',divIdName);
  8.     newdiv.innerHTML = ''+num+' <input type="text"><input type="radio" name="rd1'+num+'"><input type="radio" name="rd1'+num+'"><a href=\'#\' onclick=\'removeElement("'+divIdName+'")\'>Eliminar elemento "'+divIdName+'"</a>';
  9.     ni.appendChild(newdiv);
  10.     num++;
  11. }
  12.  
  13. function removeElement(divNum) {
  14.     var d = document.getElementById('myDiv');
  15.     var olddiv = document.getElementById(divNum);
  16.     d.removeChild(olddiv);
  17.     num--;
  18. }
  19. </script>

He reemplazado el uso del input oculto (no me gusta ese tipo de estrategias), por una variable global, pero como te he dicho esto solo sirve para el caso que planteas, supongamos que no se elimina el ultimo elemento, si no el tercero, en este caso con el script que te acabo de pasar, repetira el ultimo id, es decir tenemos: 1,2,3,4 y 5. Elimino 3 y agrego uno nuevo, en este caso quedara: 1,2,4,5,5. Lo cual si entendi bien no es lo que buscas, así que he creado dos nuevas funciones para tratar de solventar tu problema:

Código Javascript:
Ver original
  1. <script>
  2. function addElement() {
  3.     var ni = document.getElementById('myDiv');
  4.     var newdiv = document.createElement('div');
  5.     var num = faltaNum();
  6.     var divIdName = 'numero'+num+'';
  7.     newdiv.setAttribute('id',divIdName);
  8.     newdiv.innerHTML = ''+num+' <input type="text"><input type="radio" name="rd1'+num+'"><input type="radio" name="rd1'+num+'"><a href=\'#\' onclick=\'removeElement("'+divIdName+'")\'>Eliminar elemento "'+divIdName+'"</a>';
  9.     ni.appendChild(newdiv);
  10. }
  11.  
  12. function faltaNum() {
  13.     var ni = document.getElementById('myDiv').childNodes;
  14.     var i=1
  15.     while(i<=ni.length) {
  16.         if(!existe("numero"+i)) {
  17.             return i;
  18.         }
  19.         i++;
  20.     }
  21.     return i;
  22. }
  23.  
  24. function existe(id) {
  25.     var ni = document.getElementById('myDiv').childNodes;
  26.     for(var i=0; ele=ni.item(i); i++) {
  27.         if(ele.id == id) {
  28.             return true;
  29.         }
  30.     }
  31.     return false;
  32. }
  33.  
  34. function removeElement(divNum) {
  35.     var d = document.getElementById('myDiv');
  36.     var olddiv = document.getElementById(divNum);
  37.     d.removeChild(olddiv);
  38. }
  39. </script>

la función existe se encarga de recorrer el div para ver si el elemento pasado como parametro existe o no, si lo encuentra retorna true, de caso contrario retorna false, por su parte faltaNum retorna el numero que haga falta y para ello hace uso de existe. Ya para no extenderme tanto, quiero aconsejarte de no dejar ningun espacio entre las etiquetas de div:

Código HTML:
<div id="myDiv"></div> 
De esta forma se evitan posibles errores. Espero haber sido lo suficientemente claro en mi explicación y SALUDOS.
__________________
Programar apasiona y lo que apasiona es un arte, por lo tanto programar es un arte.

Quiero karma para en mi próxima vida ser un billonario bien dotado con alas.