Foros del Web » Programando para Internet » Javascript »

Validar campo creados dinamicamente

Estas en el tema de Validar campo creados dinamicamente en el foro de Javascript en Foros del Web. Holasss Tengo esta funcion para crear campos de texto dinamicamente: <script type="text/javascript"> ncanti=1 function addIngre() { var newCantidad = document.createElement('input'); newCantidad.type = 'text'; newCantidad.name = ...
  #1 (permalink)  
Antiguo 23/09/2005, 05:34
 
Fecha de Ingreso: julio-2003
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
Validar campo creados dinamicamente

Holasss
Tengo esta funcion para crear campos de texto dinamicamente:

<script type="text/javascript">
ncanti=1

function addIngre() {
var newCantidad = document.createElement('input');
newCantidad.type = 'text';
newCantidad.name = 'cantidades'+ncanti;
newCantidad.size = '5';
ncanti=ncanti+1

document.getElementById('fs').appendChild(newCanti dad);
}
</script>

...y en el form1

<input name="button" type="button" onClick="addIngre(); return false;" value="Agregar">

hasta aqui todo bien
Luego quiero validar estos campos, con el que llamo a otra funcion con un boton en el mismo form1:

<INPUT type="button" value="Enviar datos" name="enviar" onclick="noVacio()">

y esta es la funcion de validar que saque del faq con alguna pequeña modificacion

<script language="JavaScript">
function noVacio() {
var i;
var n = ncanti;
var bError = false;

for (i = 0; i < n; i++){
bError = bError || (eval("document.form1.cantidades" + i + ".value == ''"));
if (bError){
alert("Debe rellenar el/los campo/s cantidad");
eval("document.form1.cantidades" + i + ".focus()");
break;
}
}
if (!bError) alert("Ok");
}
</script>

El problema es que me da error y no se pq
A ver si hay alguna solucion....
Gracias
  #2 (permalink)  
Antiguo 23/09/2005, 08:28
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola mfdp10

Prueba cambiando:

eval("document.form1.cantidades" + i + ".value == ''")

por:

document.form1['cantidades'+i].value == ""

Saludos,
  #3 (permalink)  
Antiguo 23/09/2005, 08:54
 
Fecha de Ingreso: julio-2003
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
Me sigue dando error
Lo que no dije fue que el primer input, o sea "cantidades0" lo cargo con la pagina y los que se crean dinamicamente son los siguientes.
Por eso ncanti en la funcion de validar
Y si no genero ningun campo dinamicamente, o sea dejo el que se carga con la pagina, sí que funciona el validar.
Creo que el problema esta cuando agrego algun campo con la funcion addIngre()
Que por otro lado he comprobado ue los campos se generan bien, no solo pq me los muestra, sino pq -sin validarlos- los recojo bien cuando ejecuto el submit
  #4 (permalink)  
Antiguo 23/09/2005, 09:02
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola de nuevo.

He probado tu código y no me da ningún error Dinos que error te da y en que línea.

Saludos,
  #5 (permalink)  
Antiguo 23/09/2005, 11:58
 
Fecha de Ingreso: julio-2003
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
Hola JavierB

me da el siguiente error

Línea: 23
Car: 3
Error: document.form1.cantidades0.value es nulo o no es un objeto
Codigo:0

Saludos
  #6 (permalink)  
Antiguo 23/09/2005, 12:24
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Rehola.

Supongo que le has puesto nombre al campo que cargas con la página

<input type="text" name="cantidades0" />

¿Se puede ver la página en algún sitio?

Saludos,
  #7 (permalink)  
Antiguo 23/09/2005, 12:31
 
Fecha de Ingreso: julio-2003
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
Recontra hola
Si, se lo he puesto, auque en algunas pruebas lo he quitado.... por probar solo los dinamicos...
Lo puedes ver aqui http://www.cocinarbien.com/dinamicos.asp
gracias
  #8 (permalink)  
Antiguo 23/09/2005, 13:00
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Sorprendente

Con Firefox funciona bien (por eso te dije que no me daba error) pero con IE falla. Parece ser que el explorer no se entera de que se ha asignado un name dinamicamente. Voy a estar atento a este mensaje a ver si a alguien se le ocurre como solucionarlo. Si se me ocurre algo a mí... volveré.

Saludos,
  #9 (permalink)  
Antiguo 23/09/2005, 13:26
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Que tal?
No me ha dado error, de todas maneras agregaria debajo de la asignacion obj.name el id del mismo:
function addIngre() {
var newCantidad = document.createElement('input');
newCantidad.type = 'text';
newCantidad.name = 'cantidades'+ncanti;
newCantidad.id = 'cantidades'+ncanti;
newCantidad.size = '5';
ncanti=ncanti+1
document.getElementById('fs').appendChild(newCanti dad);
}
Lo mismo para el input inicial:
<input name="cantidades0" id="cantidades0" type="text" size="5">
No se si lo solucione ya que como dije no vi error, pero al menos es lo correcto;)
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #10 (permalink)  
Antiguo 23/09/2005, 15:13
 
Fecha de Ingreso: julio-2003
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
Eres un mago nicolaspar
poniendo el id a cada campo funciona perfecto
Muchas gracias para ti tb JavierB
Saludos
  #11 (permalink)  
Antiguo 24/09/2005, 03:38
 
Fecha de Ingreso: julio-2003
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
hola otra vez

Ahora el error me lo da cuando quiero validar el campo cantidades, para que solo se escriban numeros...

var i;
var n = ncanti;
var bError = false;

for (i = 0; i < n; i++){
bError = bError || (eval("document.form1['cantidades'+i].value == ''"));
if (bError){
alert("Escriba por lo menos 1 caracter en el campo \"Cantidad\" .");
eval("document.form1['cantidades'+i].focus()");
return (false);
}
}
var checkOK = "0123456789";
var checkStr = document.form1['cantidades'+i].value;
var allValid = true;
var decPoints = 0;
var allNum = "";
for (t = 0; t < checkStr.length; t++) {
ch = checkStr.charAt(t);
for (j = 0; j < checkOK.length; j++)
if (ch == checkOK.charAt(j))
break;
if (j == checkOK.length) {
allValid = false;
break;
}
allNum += ch;
}
if (!allValid) {
alert("Escriba sólo dígitos en el campo \"Cantidad\".");
document.form1['cantidades'+i].focus();
return (false);
}


Línea: 101
Car: 3
Error: document.form1[...].value es nulo o no es un objeto
Codigo:0

ademas me gustaria que se puedan meter en ese campo dos decimales

Saludos
  #12 (permalink)  
Antiguo 26/09/2005, 03:06
 
Fecha de Ingreso: julio-2003
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
Hola otra vez
Por si a alguien le vale lo de validar que solo sean numeros, ademas de comprobar que no este vacio, hice lo siguiente... no se si es lo correcto, pero me funciona

for (i = 0; i < n; i++){
bError = bError || (eval("document.form1['cantidades'+i].value == ''"));
var checkOK = "0123456789.,";
var checkStr = document.form1['cantidades'+i].value;
var allValid = true;
var decPoints = 0;
var allNum = "";
for (t = 0; t < checkStr.length; t++) {
ch = checkStr.charAt(t);
for (j = 0; j < checkOK.length; j++)
if (ch == checkOK.charAt(j))
break;
if (j == checkOK.length) {
allValid = false;
break;
}
allNum += ch;
}
if (!allValid) {
alert("Escriba sólo números en el campo \"Cantidad\" .");
document.form1['cantidades'+i].focus();
document.form1['cantidades'+i].select();
return (false);
}
if (bError){
alert("Escriba por lo menos 1 caracter en el campo \"Cantidad\" .");
eval("document.form1['cantidades'+i].focus()");
return (false);
}
}
  #13 (permalink)  
Antiguo 26/09/2005, 03:27
 
Fecha de Ingreso: julio-2003
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
removeChild()

Bueno..... solo me falta poder eliminar dinamicamente los inputs que se crean con la funcion addIngre().... con lo que lo intento de esta forma y me limpia todo... algo es algo..

function removeIngre()
{
var aBorrar = document.getElementById('fs');
aBorrar.parentNode.removeChild(aBorrar);
}

pq es donde se generan los inputs <fieldset id="fs">

ahora bien si quiero eliminar desde el ultimo hasta el primero que cree, pruebo con esto...

function removeIngre()
{
var aBorrar = document.getElementById('cantidades'+ncanti-1);
aBorrar.parentNode.removeChild(aBorrar);
}

me da error:
Linea: tal
Car: 3
Error: Se requiere un objeto
Codigo: 0

no se como hacerlo.... una ayuda porfa
Saludos
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 20:16.