Foros del Web » Programando para Internet » Javascript »

funcion con datos dinamicos

Estas en el tema de funcion con datos dinamicos en el foro de Javascript en Foros del Web. Hola a tod@s, estoy tratando de validar radios dinámicos, hago una consulta y genero las preguntas y posibles respuestas, debo tener un mensaje por si ...
  #1 (permalink)  
Antiguo 16/11/2016, 18:11
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
funcion con datos dinamicos

Hola a tod@s, estoy tratando de validar radios dinámicos, hago una consulta y genero las preguntas y posibles respuestas, debo tener un mensaje por si falta alguna


Pero no sé, como cambiar esto function validar_form(formulario) {
resultado = '';

validar_rgroup(formulario.nublado);
validar_rgroup(formulario.lloviendo);


Para que los nombres de los grupos de radios no sean fijos

Código HTML:
<script>
var resultado;
function validar_rgroup(rgroup) {
var algo_pinchado;
algo_pinchado = 'no';
for (var i=0; i<rgroup.length; i++) {
if (rgroup[i].checked) {
algo_pinchado = 'si';
break;
}
}

if (algo_pinchado == 'no'){
resultado = resultado + 'Selecciona un valor para la pregunta: ' + rgroup[0].name + '\n';
}
}


function validar_form(formulario) {
resultado = '';

validar_rgroup(formulario.nublado);
validar_rgroup(formulario.lloviendo);
if (resultado != '') {
resultado = 'Debes corregir los siguientes aspectos en tu encuesta: \n' + resultado;
alert(resultado);
return false;
}
}
</script>


</head>
<body>

<form name="form1" method="post" action="" onsubmit="return validar_form(document.form1)">
<p>esta nublado??

<input type="radio" name="nublado" value="poco">
<input type="radio" name="nublado" value="normal">
<input type="radio" name="nublado" value="mucho">
</p>

<p>esta lloviendo??
<input type="radio" name="lloviendo" value="poco">
<input type="radio" name="lloviendo" value="normal">
<input type="radio" name="lloviendo" value="mucho">
</p>
<p>
<input type="submit" name="Submit" value="Submit">
</p>
</form>
</body>
</html> 
  #2 (permalink)  
Antiguo 17/11/2016, 06:47
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: funcion con datos dinamicos

Ve como andas con esto:

Código HTML:
Ver original
  1. <script type="text/javascript">
  2. function verif(tipo){
  3. elements = document.getElementsByName(tipo);
  4.     for(var k=0; k<elements.length;k++){
  5.         if(elements[k].checked){
  6.         return true;
  7.         }
  8.     }
  9. return false;
  10. }
  11.  
  12.  
  13. <form method="post" action="" onsubmit="if(!verif('nublado') || !verif('lloviendo')){ alert('falta dato'); return false; }">
  14. nublado<br/>
  15. poco <input type="radio" name="nublado" value="poco"><br/>
  16. normal <input type="radio" name="nublado" value="normal"><br/>
  17. mucho <input type="radio" name="nublado" value="mucho"><br/>
  18.  
  19. <br/>
  20. <br/>
  21.  
  22. lloviendo<br/>
  23. poco <input type="radio" name="lloviendo" value="poco"><br/>
  24. normal <input type="radio" name="lloviendo" value="normal"><br/>
  25. mucho <input type="radio" name="lloviendo" value="mucho"><br/>
  26.  
  27. <input type="submit" value="go!!" />
  28.  
  29. </form>


Última edición por alvaro_trewhela; 17/11/2016 a las 08:09
  #3 (permalink)  
Antiguo 17/11/2016, 11:35
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: funcion con datos dinamicos

Hola

Pero se usa el nombre de los radios
Código HTML:
<form method="post" action="" onsubmit="if(!verif('nublado') || !verif('lloviendo')){ alert('falta dato'); return false; }"> 

Y estos pueden ser 2, 3, 4, 5...



al ser dinamicos los datos no puedo saber los nombre spara validar, como podría
  #4 (permalink)  
Antiguo 17/11/2016, 12:01
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: funcion con datos dinamicos

Es mucho más complejo genérico le voy a dar una vuelta a ver si logro algo.
  #5 (permalink)  
Antiguo 17/11/2016, 12:08
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: funcion con datos dinamicos

Cita:
Iniciado por alvaro_trewhela Ver Mensaje
Es mucho más complejo genérico le voy a dar una vuelta a ver si logro algo.
Gracias amigo sigo probando yo tambien
  #6 (permalink)  
Antiguo 17/11/2016, 12:39
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: funcion con datos dinamicos

Antes de seguir como se genera el formulario
  #7 (permalink)  
Antiguo 17/11/2016, 13:03
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: funcion con datos dinamicos

Hola hice estos cambios
Código HTML:
Pregunta 1 : Si <input type="radio" name="qty1" id="qty" /><br>
Pregunta 2 : <input type="radio" name="qty2" id="qty" /><br>
Pregunta 3 : <input type="radio" name="qty3" id="qty" /><br>

<br><br>







    <script type="text/javascript">
window.mensaje= function() {
    var inputs = document.getElementsByTagName('input'),
              
    sum = 0; 
    for(var i=0; i<inputs.length; i++) {
        var ip = inputs[i];
    
        if (ip.name && ip.checked==false) {
           var mensaje= alert( 'Debes Responder todo el Cuestionario');
        }
    
    }
    

}
    </script>
    <button onclick="javascript:mensaje()">Enviar Respuestas</button>
</body>
</html> 

Y la Validación a quedado ahora lo único malo es que si me faltan dos preguntas por responder se muestra el mensaje dos veces (alert), si no contesto ninguna el alert se visualiza 3 veces para este ejemplo... ¿Como hago para que el mensaje solo se vea una vez sin importar el numero de preguntas sin responder????

GRACIAS
  #8 (permalink)  
Antiguo 17/11/2016, 13:21
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: funcion con datos dinamicos

Ojo con tagname que toma todos tus inputs, si tienes un input submit, te lo tomará como false....

dbes poner el atributo checked a todos los que no están en cuestión...

Además estás cambiando todas las condiciones iniciales, tenías 3 respuestas por pregunta y ahora solo 1 eso lo cambia TODO y sería un cambio muy importante. no entiendo...

Última edición por alvaro_trewhela; 17/11/2016 a las 13:33
  #9 (permalink)  
Antiguo 17/11/2016, 13:35
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: funcion con datos dinamicos

Cita:
Iniciado por alvaro_trewhela Ver Mensaje
Ojo con tagname que toma todos tus inputs, si tienes un input submit, te lo tomará como false....

dbes poner el atributo checked a todos los que no están en cuestión...

Además estás cambiando todas las condiciones iniciales, tenías 3 respuestas por pregunta y ahora solo 1 eso lo cambia TODO y sería un cambio muy importante. no entiendo...
No importa el numero de respuestas ya que quedaran agrupadas por nombre... el punto es validar que ninguna pregunta valla sin responderse... el ultimo código me ha dado buenos resultados, solo que si tuviera 10 preguntas y faltan 5 por responder se mandarían 5 mensajes... ahora trabajo en eso

Saludos
  #10 (permalink)  
Antiguo 17/11/2016, 13:47
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: funcion con datos dinamicos

ocupa break en el for.

Pero ese no es mi punto, mi punto es que si tienes preguntas con una respuesta anda bien:

Quiero por favor que compares tu código:

Código Javascript:
Ver original
  1. function test(){
  2. var inputs = document.getElementsByTagName("input");
  3.     for(var k=0;k<inputs.length;k++){
  4.     ip = inputs[k];
  5.         if(!ip.checked){
  6.         alert("FALTA");
  7.         break;
  8.         }
  9.     }
  10. }

saque el ip.name, no sirve de nada, solo te entrega el nombre del input como cadena, nada más

Y compara eso con

Código HTML:
Ver original
  1. P1 op1<input type="radio" name="p1" /><br/>
  2. P2 op1<input type="radio" name="p2" /><br/>
  3. P3 op1<input type="radio" name="p3" /><br/>
  4.  
  5. <input type="button" onclick="test();" checked value="test"/>

Luego con esto

Código HTML:
Ver original
  1. P1 op1<input type="radio" name="p1" /> op2<input type="radio" name="p1" /><br />
  2. P2 op1<input type="radio" name="p2" /> op2<input type="radio" name="p2" /><br />
  3. P3 op1<input type="radio" name="p3" /> op2<input type="radio" name="p3" /><br />
  4.  
  5. <input type="button" onclick="test();" checked value="test"/>

Veras que es distinto....

La razon es que con 2 o + opciones siempre habrá un input no checkeado


Última edición por alvaro_trewhela; 17/11/2016 a las 14:11
  #11 (permalink)  
Antiguo 17/11/2016, 16:02
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: funcion con datos dinamicos

CIERTO cuando hay dos respuesta sigue marcando que falta


  #12 (permalink)  
Antiguo 17/11/2016, 17:19
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: funcion con datos dinamicos

Añade un <label> a cada grupo. Obten la cantidad de <label> que hay para saber cuantos radio han de estar marcados. Si el número de label es distinto al número de radio, es que alguno/s no están marcados
  #13 (permalink)  
Antiguo 17/11/2016, 17:56
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: funcion con datos dinamicos

Cita:
Iniciado por mpozo Ver Mensaje
Añade un <label> a cada grupo. Obten la cantidad de <label> que hay para saber cuantos radio han de estar marcados. Si el número de label es distinto al número de radio, es que alguno/s no están marcados
Pero como obtenga el total de radios seleccionados
  #14 (permalink)  
Antiguo 18/11/2016, 07:52
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: funcion con datos dinamicos

Es algo como esto
Código Javascript:
Ver original
  1. <!DOCTYPE html>
  2. <html dir="ltr" lang="es-es">
  3.     <head>
  4.         <title></title>
  5.         <meta charset="utf-8">
  6.         <style>
  7.  
  8.         </style>
  9.         <script>
  10.  
  11.         </script>
  12.     </head>
  13.     <body>
  14.  
  15.         <form method="post" action="" id="f">
  16.  
  17.             <label for="nublado">nublado</label><br/>
  18.             poco <input type="radio" name="nublado" value="poco"><br/>
  19.             normal <input type="radio" name="nublado" value="normal"><br/>
  20.             mucho <input type="radio" name="nublado" value="mucho"><br/>
  21.              
  22.             <br/>
  23.             <br/>
  24.              
  25.             <label for="lloviendo">lloviendo</label><br/>
  26.             poco <input type="radio" name="lloviendo" value="poco"><br/>
  27.             normal <input type="radio" name="lloviendo" value="normal"><br/>
  28.             mucho <input type="radio" name="lloviendo" value="mucho"><br/>
  29.  
  30.             <br/>
  31.             <br/>
  32.  
  33.             <label for="llovi">llovi</label><br/>
  34.             poco <input type="radio" name="llovi" value="poco"><br/>
  35.             normal <input type="radio" name="llovi" value="normal"><br/>
  36.             mucho <input type="radio" name="llovi" value="mucho"><br/>
  37.  
  38.             <input type="submit" id="s" value="go!!" />
  39.          
  40.         </form>
  41.  
  42.  
  43.         <script>
  44.         document.querySelector('#f').addEventListener('submit', function(event) {validaData(event)});
  45.  
  46.         function validaData(evt) {
  47.  
  48.             var labels = document.querySelectorAll('form label').length,
  49.             check = 0;
  50.  
  51.             [].forEach.call(document.querySelectorAll('form input[type="radio"]'), function(e) {
  52.  
  53.                 if (e.checked) ++check;
  54.             });
  55.  
  56.             if (labels > check) {
  57.  
  58.                 evt.preventDefault();
  59.                 console.log('rellena todos los grupos');
  60.  
  61.             }
  62.         }
  63.         </script>
  64.     </body>
  65. </html>
  #15 (permalink)  
Antiguo 18/11/2016, 09:53
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: funcion con datos dinamicos

Gracias amigo lo estoy adecuando
  #16 (permalink)  
Antiguo 18/11/2016, 10:43
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: funcion con datos dinamicos

Ultima pregunta no sé mucho de javascript, ¿Por qué si subo el script antes del formulario no funciona? quizá sea una pregunta "tonta" pero me quede con esa duda
  #17 (permalink)  
Antiguo 18/11/2016, 16:47
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: funcion con datos dinamicos

Es porque el dom no está cargado. Para poder colocar el javascript en el head, has de usar DOMContentLoaded o load https://developer.mozilla.org/es/doc...MContentLoaded

Etiquetas: dinamicos, funcion, html, input, valor
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:50.