Foros del Web » Programando para Internet » Javascript »

el número de inputs que existe siempre coincide con un número.

Estas en el tema de el número de inputs que existe siempre coincide con un número. en el foro de Javascript en Foros del Web. Hola, tengo que la siguiente función en Javascript que me permite crear unos div con inputs según el número elegido en una lista/menú de un ...
  #1 (permalink)  
Antiguo 15/03/2012, 09:01
 
Fecha de Ingreso: octubre-2010
Ubicación: Madrid
Mensajes: 295
Antigüedad: 14 años, 1 mes
Puntos: 12
el número de inputs que existe siempre coincide con un número.

Hola, tengo que la siguiente función en Javascript que me permite crear unos div con inputs según el número elegido en una lista/menú de un formulario:

Código Javascript:
Ver original
  1. function crear(obj) {
  2.     var num
  3.     var max = document.getElementById("tiradores").value;
  4. for (num=1;num<=max;num++) {
  5.   fi = document.getElementById('fiel');
  6.   contenedor = document.createElement('div');
  7.   contenedor.id = 'div'+num;
  8.   fi.appendChild(contenedor);
  9.  
  10.   ele1 = document.createElement('input');
  11.   ele1.type = 'text';
  12.   ele1.size = 5 ;
  13.   ele1.name = 'fil'+num;
  14.   contenedor.appendChild(ele1);
  15.  
  16.   ele2 = document.createElement('input');
  17.   ele2.type = 'text';
  18.   ele2.size = 50 ;
  19.   ele2.name = 'tir'+num;
  20.   contenedor.appendChild(ele2);
  21. }
  22. }

el formulario de donde elijo el número es el siguiente y me crea los campos es el siguiente:

Código HTML:
<label class="seccion">Número de Tiradores (participantes del club)
      <select name="tiradores" id="tiradores">
        <option value="1" selected="selected">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
      </select>
    </label>
    <input type="button" value="Añadir" onclick="crear(this)" /> 
Si le doy sólo una vez al botón me muestra tantos campos como he puesto, sin embargo si le vuelvo a dar con el mismo número o cambiado me añade más campos, es decir si la primera vez elijo 2 y la segunda 3 me aparece un total de 5 campos, yo lo que quiero es que el número de campos siempre sea igual al value establecido, es decir si elijo el 5 me crea 5 campos, pero si cambio de opinión y elijo un 3 quiero que me borre 2 campos y sean sólo 3 (en vez de añadirme 3 y quedarme con 8)

espero haberme explicado y que me podáis ayudar, no sé como hacerlo.
  #2 (permalink)  
Antiguo 15/03/2012, 12:19
Avatar de goteen_mx  
Fecha de Ingreso: abril-2005
Ubicación: D.F.
Mensajes: 403
Antigüedad: 19 años, 7 meses
Puntos: 37
Respuesta: el número de inputs que existe siempre coincide con un número.

Antes del for puedes pone esto

document.getElementById('fiel').innerHTML = "";

Vas a limpiar tu contenedor principal ante de crear y agragar los hijos

Saludos
__________________
Born to be free.
  #3 (permalink)  
Antiguo 15/03/2012, 14:56
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: el número de inputs que existe siempre coincide con un número.

a ver si funciona con este cambio
Cita:
fi = document.getElementById('fiel');
while(fi.firstChild) fi.removeChild(fi.firstChild);
for (num=1;num<=max;num++) {
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #4 (permalink)  
Antiguo 15/03/2012, 16:22
Avatar de goteen_mx  
Fecha de Ingreso: abril-2005
Ubicación: D.F.
Mensajes: 403
Antigüedad: 19 años, 7 meses
Puntos: 37
Respuesta: el número de inputs que existe siempre coincide con un número.

las dos opciones hacen lo mismo solo que con innerHTML no habría necesidad de iterar para quitar elemento por elemento.

Saludos.
__________________
Born to be free.
  #5 (permalink)  
Antiguo 16/03/2012, 07:25
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: el número de inputs que existe siempre coincide con un número.

Cita:
Iniciado por goteen_mx Ver Mensaje
las dos opciones hacen lo mismo solo que con innerHTML no habría necesidad de iterar para quitar elemento por elemento.

Saludos.
a ver que te respondo a esto. si se anidan elementos, se quiere eliminar esos elementos anidados y tenemos una función con la cual se puede eliminar esos elementos anidados, ...... en ocasiones, que se pueda, no quiere decir que sea correcto. pero sí el resultado sería el mismo
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #6 (permalink)  
Antiguo 16/03/2012, 08:06
 
Fecha de Ingreso: octubre-2010
Ubicación: Madrid
Mensajes: 295
Antigüedad: 14 años, 1 mes
Puntos: 12
Respuesta: el número de inputs que existe siempre coincide con un número.

Gracias IsaBelM me sirvió muchísimo, pero me puedes explicar un poco que hace el while?? que no lo he conseguido entender, y de aquí supongo que vendrá el problema que tengo ahora porque me hace lo que quiero perfecto, pero si escribo algo en los campos, los que se supone que se quedan se borran, eso es porque en realidad no se quedan no?? sino que se "reinicia" todo...

Habría alguna forma de dejar los que están escritos??
  #7 (permalink)  
Antiguo 16/03/2012, 15:29
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: el número de inputs que existe siempre coincide con un número.

entonces se complica un poco mas
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function crearCampos(cantidad){
var div = document.getElementById('campos_dinamicos');
nuevosNodos = cantidad - div.childNodes.length;
asignarId = div.childNodes.length;

if(nuevosNodos >= 1) {

for(var i = 1; i <= nuevosNodos; i++){

var salto = document.createElement('p');
var input = document.createElement('input');
var text = document.createTextNode('Campo Dinamico ' + ++asignarId + ': ');
input.setAttribute('type', 'text');
input.setAttribute('name', 'campo[]');
input.setAttribute('id', 'campo' + asignarId);
input.setAttribute('size', '12');
input.className = 'input';
salto.appendChild(text);
salto.appendChild(input);
div.appendChild(salto);
}
} else {

while(nuevosNodos <= -1) {

div.removeChild(div.lastChild);
nuevosNodos++;
}

}
}
</script>
</head>
<body>
<form>
¿Cuantos Campos? <input type="text" name="cantidad" id="cantidad" value="" onkeyup="if(this.value != '') {crearCampos(this.value);}" />
<div id="campos_dinamicos"></div>
</form>
</body>
</html>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: formulario, input, inputs, siempre
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 09:19.