Foros del Web » Programando para Internet » Javascript »

Validar formulario sin saber los campos que hay

Estas en el tema de Validar formulario sin saber los campos que hay en el foro de Javascript en Foros del Web. A ver si lo que quiero hacer se puede hacer de forma fácil. Quiero validar que un usuario rellene todos los campos de un formulario, ...
  #1 (permalink)  
Antiguo 13/11/2017, 06:15
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 4 meses
Puntos: 8
Validar formulario sin saber los campos que hay

A ver si lo que quiero hacer se puede hacer de forma fácil. Quiero validar que un usuario rellene todos los campos de un formulario, pero el problema está en que ese formulario no siempre es igual, sino que se conforma en función de varias opciones. Lo que sí se es que todos los campos van a ser de tipo Select y su nombre siempre va a comenzar por "respuestas_".

Normalmente para validar un fomulario uso este script

Código Javascript:
Ver original
  1. <script language="javascript">
  2. function validar(frm) {
  3.  var ret;
  4.  if (frm.nombre.value == "" || frm.email.value == "" || frm.ocupacion.value == "" || frm.pais.value == "" || frm.titulacion.value == "" ) {
  5.   alert('All fields marked with * are requiered');
  6.   ret = false;
  7.  }
  8. return ret;
  9. }
  10. </script>

Pero claro, hay que especificar los campos que quieres controlar. ¿Hay alguna forma para que compruebe todos los campos cuyo nombre/id comience por "respuestas_" y que no deje continuar si alguno está en blanco?
__________________
Vayamos por Partes :: Jack el Destripador
  #2 (permalink)  
Antiguo 13/11/2017, 08:49
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Validar formulario sin saber los campos que hay

Yo haría algo así, no lo probé porque ando sin tiempo, lo hice muy, muy, rápido, pero espero se entienda la ídea y se acomode, ojo tomé arbitraríamente que si los valores de checkboxs, radios y combos no tienen valores asignados, igual se toma como no ingresado, puede pasar que no tengan valor pero si esten si hayan sido operados, así que ojo ahí:

Código Javascript:
Ver original
  1. function allFill(id, selectDefaultNeeded /* üse default value of selects as is not filled form */, selectFirstDefault /* in select the fist option is consider default */){
  2. var form = document.getElementById(id);
  3. var inputs = form.getElementsByTagName("input");
  4. var radios = new Array(); //neccessary for radios checks
  5.  
  6.     for(var k=0;k<inputs.length;k++){ //check for inputs
  7.     var input = inputs[k];
  8.     var type = input.getAttribute("type");
  9.  
  10.         if(input.value == ""){ return false }
  11.        
  12.         if(type == "checkbox" && !input[k].checked){ return false; }//for checkbox
  13.        
  14.         if(type == "radio"){ //for radios, this is quitely complicated
  15.         var name = input.getAttribute("name"); //getting the radio name group
  16.         var passthru = false; //aux to se if the radio groud will pass the exam
  17.             if(radios.indexOf(name) == -1){ //if the groups is not checked yet
  18.             var rds = form.getElementsByName(name); //select all elements with the radio group name
  19.                 for(var n=0;n<rds.length;n++){
  20.                 var rtype = rds[k].getAttribute("radio"); //this is just for security...
  21.                     if(rtype == "radio" && rds[k].checked){  //if checked...
  22.                     radios[radios.length] = name; //add the name to radios groups checked
  23.                     passthru = true; //the group has passed the exam
  24.                     break; //go away
  25.                     }
  26.                 }
  27.             }
  28.            
  29.             if(!passthru){ //so.. if the groups doesn't pass the exam
  30.             return false;
  31.             }
  32.         }
  33.     }
  34.  
  35. var ta = form.getElementsByTagName("textarea"); for(var k=0; k<ta.length; k++){ if(ta.value == ""){ return false; } } //for textarea
  36.    
  37. var selects = form.getElmeentsByTagName("select");
  38.  
  39.     for(var k=0;k<selects.length;k++){ //for select, again quitely complicated
  40.        
  41.         if(selects[k].value == ""){ return false; } //obiusly this first
  42.    
  43.         if(selectDefaultNeeded){ //if default is needed
  44.         var opts = selects.getElementsByTagName("option"); //get ops
  45.         var defaultValue = ""; //set default value
  46.        
  47.            
  48.             for(var n=0;n<opts.length;n++){ //getting here the default -if exists- option. attribute (selected)
  49.                 if(opts[n].hasAttribute("selected")){
  50.                 defaultValue = opts[k].value;
  51.                 break;
  52.                 }
  53.             }
  54.            
  55.             if(selectFirstDefault && defaultValue == ""){ defaultValue == opts[0].value; } //this is you use first value as default
  56.  
  57.             if(selects[k].value == defaultValue || defaultValue == ""){ return false; } //if the default is used + empty security value
  58.            
  59.         }
  60.     }
  61. return true;
  62. }

Parametros:

id: id del form
selectDefaultNeeded (true/false): Usar el valor por defecto de un combo, como si no estubiera ingresado, (atributo selected)
selectFirstDefault (true/false): Si el anterior es true, usar la primera opcion como defecto

PS: disculpa si me explique mal en todo este post repito vine de pasa
PS2: te todas formas valida en back-end <----------edite esto

Última edición por alvaro_trewhela; 13/11/2017 a las 08:57
  #3 (permalink)  
Antiguo 13/11/2017, 09:17
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Validar formulario sin saber los campos que hay

Si lo que buscas es no dejar campos de selección sin un valor seleccionado, tienes dos formas de impedirlo desde el lado del cliente:

1. Usando el atributo required.

Código HTML:
Ver original
  1. <select name="foo" required>

2. Obteniendo a todos los <select> del formulario, recorriendo el conjunto resultante y verificando en cada iteración del bucle que cada <select> tenga un valor establecido.

Código Javascript:
Ver original
  1. var form = document.querySelector("#id_del_formulario"),
  2.     selects = form.querySelectorAll("select");
  3.  
  4. [].forEach.call(selects, function(select){
  5.     if (!select.value.length){
  6.         //El <select> no posee un valor
  7.     }
  8. });

No olvides la validación más importante de todas: la que se realiza del lado del servidor (PHP, ASP, JSP, Node.js).

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: campos, form, formulario, java
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 10:18.