Foros del Web » Programando para Internet » Javascript »

No me elimina campos

Estas en el tema de No me elimina campos en el foro de Javascript en Foros del Web. Que tal foros del web, tengo el siguiente codigo que me genera una caja de texto y dos radio button cada vez que le doy ...
  #1 (permalink)  
Antiguo 26/08/2011, 10:50
 
Fecha de Ingreso: julio-2011
Ubicación: Jalisco
Mensajes: 44
Antigüedad: 12 años, 9 meses
Puntos: 0
Sonrisa No me elimina campos

Que tal foros del web, tengo el siguiente codigo que me genera una caja de texto y dos radio button cada vez que le doy clic en nuevo

Código HTML:
Ver original
  1. <input type="hidden" value="0" id="theValue" />
  2. <p><a href="javascript:;" onclick="addElement();"><input type="button" name="generate" value="Nuevo"></a></p>
  3.     <div id="myDiv"> </div>
  4. function addElement() {
  5.   var ni = document.getElementById('myDiv');
  6.   var numi = document.getElementById('theValue');
  7.   var num = (document.getElementById('theValue').value -1)+ 2;
  8.  
  9.   numi.value = num;
  10.  
  11.   var newdiv = document.createElement('div');
  12.   var divIdName = 'numero'+num+'';
  13.  
  14.   newdiv.setAttribute('id',divIdName);
  15.   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>';
  16.   ni.appendChild(newdiv);
  17. }
  18.  
  19. function removeElement(divNum) {
  20.   var d = document.getElementById('myDiv');
  21.   var olddiv = document.getElementById(divNum);
  22.  
  23.   d.removeChild(olddiv);
  24. }
  25. </body>
  26. </html>

también tiene la opción de eliminar un campo si este ya no es requerido, pero tengo el problema de que no me elimina dicho campo... alguna sugerencia ? pueden ver ustedes cual es mi error de código ??? :/

saludos cordiales
  #2 (permalink)  
Antiguo 26/08/2011, 11:34
 
Fecha de Ingreso: julio-2011
Ubicación: Jalisco
Mensajes: 44
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: No me elimina campos

alguna respuesta ???
  #3 (permalink)  
Antiguo 26/08/2011, 12:15
Avatar de 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

La respuesta en sencilla, estas enviando el elemento directamente y no la referencia o id del mismo, debes tener en cuenta que para enviar String debes encerrarlas entre comillas dobles o sencillas, de esta forma:

Código Javascript:
Ver original
  1. 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>';

Fijate en el divIdName y las "", asi es como lo tenias antes:

Código Javascript:
Ver original
  1. 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>';

Espero haberte servido de ayuda
__________________
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.
  #4 (permalink)  
Antiguo 26/08/2011, 12:30
 
Fecha de Ingreso: julio-2011
Ubicación: Jalisco
Mensajes: 44
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: No me elimina campos

Cita:
Iniciado por laratik Ver Mensaje
La respuesta en sencilla, estas enviando el elemento directamente y no la referencia o id del mismo, debes tener en cuenta que para enviar String debes encerrarlas entre comillas dobles o sencillas, de esta forma:

Código Javascript:
Ver original
  1. 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>';

Fijate en el divIdName y las "", asi es como lo tenias antes:

Código Javascript:
Ver original
  1. 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>';

Espero haberte servido de ayuda
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 ?
  #5 (permalink)  
Antiguo 26/08/2011, 13:28
Avatar de 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.
  #6 (permalink)  
Antiguo 26/08/2011, 15:05
 
Fecha de Ingreso: julio-2011
Ubicación: Jalisco
Mensajes: 44
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: No me elimina campos

perfecto... tal cual lo necesito :) muchas gracias, maestraso... no cabe duda que cada día se aprende algo nuevo

Etiquetas: campos, html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:44.