2012-02-23 10 views
21

corto

Lo que quiero hacer es lo siguiente: En primer lugar, la función validate() debe comprobar todas las entradas una por una: si no están vacíos (o whitespaced), entonces mover a la declaración if (para verificar los botones de radio) Pero si algunas de las entradas están vacías, detenga la función de validación completa y enfoque la entrada vacía.salida no sólo de la función del niño, sino de la función de los padres toda

Aquí es resultado: http://jsfiddle.net/tt13/y53tv/4/

Sólo tiene que pulsar el botón ok, verá que terminó en primer lugar la función y los incendios, si es demasiado. Pero quiero salir de la función entera validate() en caso de que haya campo vacío, no sólo de cada función

detallada

JS

function validate() { 
    $('.var_txt').each(function() { 
     if ($.trim($(this).val()) == '') { 
      $(this).focus(); 
      return false; 
     } 
    }); 

    if (!$(".answer:checked").val()) { 
     alert("boom"); 
     return false; 
    } 
    return true; 
} 
$(document).ready(function() { 
    $("#add_question").submit(function(e) { 
     if (validate()) { 
      alert("good"); 
     } 
     e.preventDefault(); 
    }) 
});​ 

Formato HTML

()
<form id="add_question" method="post" action=""> 
<table> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="a" /> a) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_a" /> 

        </td> 

        </tr> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="b" /> b) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_b" /> 

        </td> 

        </tr> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="c" /> c) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_c" /> 

        </td> 

        </tr> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="d" /> d) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_d" /> 

        </td> 

        </tr> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="e" /> e) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_e" /> 

        </td> 

        </tr> 

       </table> 
<input type="submit" name="submit" value="ok" /> 

</form> 

Respuesta

18

Agregue una bandera que tiene que ser falsa para continuar.

function validate() { 
    var invalid = false; 
    $('.var_txt').each(function() { 
     if ($.trim($(this).val()) == '') { 
      $(this).focus(); 
      invalid = true; 
      return false; 
     } 
    }); 
    if (invalid) { 
     return false; 
    } 

    if (!$(".answer:checked").val()) { 
     alert("boom"); 
     return false; 
    } 
    return true; 
} 
$(document).ready(function() { 
    $("#add_question").submit(function(e) { 
     if (validate()) { 
      alert("good"); 
     } 
     e.preventDefault(); 
    }) 

});​ 
4

Podemos romper el bucle $ each() a una iteración particular haciendo que la función de devolución de llamada return false. La devolución de no falso es lo mismo que una instrucción continuar en un ciclo for; saltará de inmediato a la próxima iteración.

Establezca un pabellón al comienzo de la validación: var broken = false;. Dentro de each, justo antes de return false;, agregue broken = true;. Luego, después de su código each agregar if(broken) return false;

1

¿Te gusta?

function validate() { 
    var pass = true; 
    $('.var_txt').each(function() { 
     if ($.trim($(this).val()) == '') { 
      $(this).focus(); 
      pass = false; 
      return false; 
     } 
    }); 

    if (!$(".answer:checked").val()) { 
     alert("boom"); 
     pass = false; 
     return false; 
    } 
    return pass; 
} 

Agregue una variable que compruebe si las condiciones son verdaderas.

Cuestiones relacionadas