Foros del Web » Programando para Internet » Javascript »

no recorre todo el FOR

Estas en el tema de no recorre todo el FOR en el foro de Javascript en Foros del Web. hola tengo el siguiente codigo de validacion para 6 grupos de radios, el primer grupo se llama 'preg01' con 5 radios, el segundo grupo se ...
  #1 (permalink)  
Antiguo 27/03/2012, 22:36
 
Fecha de Ingreso: febrero-2011
Mensajes: 85
Antigüedad: 13 años, 2 meses
Puntos: 3
no recorre todo el FOR

hola tengo el siguiente codigo de validacion para 6 grupos de radios, el primer grupo se llama 'preg01' con 5 radios, el segundo grupo se llama 'preg02' igual con 5 inputs radios asi hasta 6 grupos. El problema es que solo me lee el primer grupo y se sale, no completa los 6 grupos:

function Comprobar(){
var obji=1;
for(obji=1; obji<=6; obji++){

var thisObj = 'preg0' ;
var objs = document.getElementsByName(thisObj + obji);
alert(objs);
for (oi=0; oi<=objs.length; oi++) {
alert(objs[oi].checked);
}
}

return false;

}

Alguien me puede ayudar

Gracias
  #2 (permalink)  
Antiguo 28/03/2012, 04:33
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 74
Antigüedad: 12 años, 1 mes
Puntos: 12
Respuesta: no recorre todo el FOR

Tienes un error en el segundo bucle. El indice del bucle anidado deberia iterar entre 0 y objs.length-1. Al hacerlo hasta objs.length, te sales de rango.
  #3 (permalink)  
Antiguo 28/03/2012, 07:27
 
Fecha de Ingreso: febrero-2011
Mensajes: 85
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: no recorre todo el FOR

muchisimas gracias Luis, parece que es un error de primaria o de kinder, de cualquier manera me solucionaste el problema, inicialmente este era el codigo, pero tampoco me funciono:

"-------------------------------------------------------
Buenos dias, alguien me puede ayudar, ya que no encuentro mi error, tengo varios arrays de botones de opciones (preg01, preg02, etc.), pero al validar el siguente codigo, me saca del FOR, solo lo hace una vez.

el parametro "obj" de la funcion es el nombre del formulario, y cada pregunta "obj0X" tiene 4 botones de opcion.

function Comprobar(obj) {
var str = "";
var obj2 = "preg0";
var i;

for(i=1; i<6; i++) {
var obj1 = "";
obj1 = obj2 + i;
alert(obj1);
if (!obj.obj1[0].checked &&
!obj.obj1[1].checked &&
!obj.obj1[2].checked &&
!obj.obj1[3].checked) {
str += "Debe elegir una opcion en la pregunta ";
str += i;
}
}

if(str = "") {
alert(str);
return false;
} else {
return true;
}
}

Si quito el siguiente codigo, el for si se cumple las 5 veces, pero si lo pongo solo me muestra la primera alerta con el mensaje de "preg01"

if (!obj.obj1[0].checked &&
!obj.obj1[1].checked &&
!obj.obj1[2].checked &&
!obj.obj1[3].checked) {
str += "Debe elegir una opcion en la pregunta ";
str += i;
}

De antemano gracias

--------------------------------------------------------"

Si tienes tiempo de hecharle un ojo

Gracias anticipadas
  #4 (permalink)  
Antiguo 28/03/2012, 10:30
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 74
Antigüedad: 12 años, 1 mes
Puntos: 12
Respuesta: no recorre todo el FOR

El problema esta en el parametro "obj" y el uso que haces que la variable con el nombre de los botones de radio.
Dices que es el nombre del formulario, siendo asi, no puedes poner simplemente "obj.obj1[0].checked" para acceder al estado de los botones de radio.
Ten en cuenta que tanto obj como obj1 son cadenas de caracteres, variables que contienen un string (el nombre del formulario y el nombre de un boton de radio), pero no son el formulario ni el boton de radio, por tanto no puedes acceder a las propieddades de esos elementos.
Tienes que obtener un objeto que referencie esos elementos a partir del nombre de los mismos. ¿Como hacer eso? con el metodo "getElementsByName" del objeto "document" que ya conoces.

El metodo "getElementsByName" retorna la coleccion de elementos con el nombre dado como argumento, asi que no necesitas el nombre del formulario. Si la pagina contuviera varios formularios, habiendo botones de radio llamados iguales, la cosa se complicaria y tendrias que usar la propiedad "form" de cada boton para saber a que formulario pertenecen y discriminar entre ellos.

Consejo: utiliza nombres de variable mas descriptivos, o cuando tus codigo crezca y se haga mas complejo te será imposible seguirlo.


La funcion que necesitas quedaria asi:

Código:
function Comprobar() {
  var str = "";
  
  var i;
  for(i=1; i<6; i++) {
    var nombreRdoButton = "preg0" + i;    
    alert(nombreRdoButton);
    var objsRdoButton = document.getElementsByName(nombreRdoButton);
    
    if (!objsRdoButton[0].checked && 
        !objsRdoButton[1].checked &&
        !objsRdoButton[2].checked &&
        !objsRdoButton[3].checked) {
      str += "Debe elegir una opcion en la pregunta " + i;
    }
  }

  if (str != "") {
    alert(str);
    return false;
  } else {
    return true;
  }
}
  #5 (permalink)  
Antiguo 28/03/2012, 19:25
 
Fecha de Ingreso: febrero-2011
Mensajes: 85
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: no recorre todo el FOR

Buenas tardes Luis:

fijate que el troso de codigo

function validar(obj){

if (!obj.nombreRadio[0].checked &&
!obj.nombreRadio[1].checked &&
!obj.nombreRadio[2].checked &&
!obj.nombreRadio[3].checked) {
str += "Debe elegir una opcion en la pregunta ";
str += i;
}
}

para un solo grupo, si funciona pasando como parametro de la funcion el nombre del formulario y poniendo el nombre del radio, pero en fin lo solucione de la siguiente manera, que es lo que tu propones con algunos arreglos, a ver que te parece



function Comprobar(){
var res1 = ['Excelente','Bueno','Regular','Malo'];
var res2 = ['Lona','Seccion Amarilla','Volante','Recomendacion','Ubicacion'];
var obji=1;
var txt = '';
var thisObj = 'preg0' ;
var objs = '';
var valor = '';

for(obji=1; obji<=5; obji++){
objs = document.getElementsByName(thisObj + obji);
valor = false;
for (oi=0; oi<=objs.length-1; oi++) {
if(objs[oi].checked){
document.getElementsByName('r' + obji)[0].value = res1[oi];
valor = true;
continue;
}
}
if(!valor)
txt += 'Debe elegir una opcion en la pregunta ' + obji + '\n'
}

objs = document.getElementsByName(thisObj + 6);
valor = false;
for (oi=0; oi<=objs.length-1; oi++) {
if(objs[oi].checked){
document.getElementsByName('r' + 6)[0].value = res2[oi];
valor = true;
continue;
}
}

if(!valor)
if(document.getElementsByName('otros')[0].value == '')
txt += 'Debe elegir una opcion en la pregunta 6\n';

if(!txt =='') {
alert(txt);
return false;
}else{
return true;
}

}

De cualquier manera la primera opcion propuesta no me hubiera servido, ya que tendria que utilizar mas codigo para saber que radio seleccionaron de cada grupo, parece que para ser nuevo en java script no me fue nada mal.

Ahora voy con otro reto, quiero leer valores de una base de datos para llenar dos combos y que al seleccionar la en el primero un nombre, busque en la base de datos y me rellene el otro combo con los resultados que corresponden al primer.

Segun me comentan esto se tiene que hacer con Ajax, tienes algo al respecto??

Saludos y nuevamente Gracias

Etiquetas: input, js, todo
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 08:55.