2012-09-14 17 views
8

Tengo aquí una función que valida campos en un formulario si están vacíos.Cómo comprobar el valor de retorno de la función si es verdadero o falso

function ValidateForm() 
{ 
    jQuery('span.error_msg').hide(); 
    var success = true; 
    jQuery("#shippingF input").each(function() 
     { 
      if(jQuery(this).val()=="") 
      { 
       jQuery(this).next().show(); 
       success = false; 
      } 
    }); 
    return success; 
} 

Ahora quería utilizar esa función aquí:

function post(url,formId) { 
     jQuery("#process").html('<img src="<?php echo get_bloginfo('wpurl').'/wp-content/plugins/'.basename(dirname(__FILE__)).'/images/co/ajax-loader.gif'; ?>" alt="loading" title="ajax-loader" width="16" height="16" class="alignnone size-full wp-image-134">'); 
    jQuery.post(url, jQuery('#' + formId).serialize(), function(d) { 
     jQuery('html,body').animate({scrollTop: jQuery("#scrollhere").offset().top},'slow'); 
     jQuery("#response").html('<center><p style="height:820px"><span style="color:black;font-weight:bold;font: 11px arial,verdana,sans-serif;"><b>Loading available payment getaways..</b></span><br/><img src="<?php echo get_bloginfo('wpurl').'/wp-content/plugins/'.basename(dirname(__FILE__)).'/images/co/8-1.gif'; ?>" width="220" height="19" /></p></center>'); 
     jQuery("#response").load("<?php echo get_bloginfo('wpurl').'/wp-content/plugins/'.basename(dirname(__FILE__)).'/checkout_payment.php'; ?>", function() { Cufon.refresh(); }); 
     jQuery("#response").attr("style","height:1030px"); 
    }); 
} 

Lo probé y me ocurra esto.

function post(url,formId) { 
ValidateForm(); 
if(ValidateForm() == 'false') { 
    jQuery('html,body').animate({scrollTop: jQuery("#shippingF").offset().top},'slow'); 
} else { 
     jQuery("#process").html('<img src="<?php echo get_bloginfo('wpurl').'/wp-content/plugins/'.basename(dirname(__FILE__)).'/images/co/ajax-loader.gif'; ?>" alt="loading" title="ajax-loader" width="16" height="16" class="alignnone size-full wp-image-134">'); 
    jQuery.post(url, jQuery('#' + formId).serialize(), function(d) { 
     jQuery('html,body').animate({scrollTop: jQuery("#scrollhere").offset().top},'slow'); 
     jQuery("#response").html('<center><p style="height:820px"><span style="color:black;font-weight:bold;font: 11px arial,verdana,sans-serif;"><b>Loading available payment getaways..</b></span><br/><img src="<?php echo get_bloginfo('wpurl').'/wp-content/plugins/'.basename(dirname(__FILE__)).'/images/co/8-1.gif'; ?>" width="220" height="19" /></p></center>'); 
     jQuery("#response").load("<?php echo get_bloginfo('wpurl').'/wp-content/plugins/'.basename(dirname(__FILE__)).'/checkout_payment.php'; ?>", function() { Cufon.refresh(); }); 
     jQuery("#response").attr("style","height:1030px"); 
    }); 
} 
} 

El problema es que, la validación está trabajando .. Sin embargo, la función se ejecuta .post() aunque hay campo vacío. Supongo que está en la condición if/else ... ¿hay una mejor manera de lograr esto?

Gracias.

+0

¿Hay alguna razón por la que llame a ValidateForm dos veces? –

+0

El problema es que, si no incluyo 'ValidateForm();' en la función 'post()' ... los mensajes de error no se muestran .. – Ken

+0

Ya se está llamando dentro del if. No tienes que volver a llamar antes de eso. –

Respuesta

13
false != 'false' 

Por buenas medidas, puesto el resultado de validar en una variable para evitar la doble validación y usar eso en la declaración IF. De esta manera:

var result = ValidateForm(); 
if(result == false) { 
... 
} 
3

que está comparando el resultado con una cadena ('falso') no es la constante integrada negativo (falso)

sólo tiene que utilizar

if(ValidateForm() == false) { 

o mejor aún

if(!ValidateForm()) { 

también ¿por qué llamas a validateForm dos veces?

+0

El problema es que, si no incluyo 'ValidateForm();' en la función 'post()' ... los mensajes de error no se muestran .. – Ken

0

ValidateForm devuelve boolean, no es string.
Cuando hace esto if(ValidateForm() == 'false'), es lo mismo que if(false == 'false'), que no es verdadero.

function post(url, formId) { 
    if(!ValidateForm()) { 
     // False 
    } else { 
     // True 
    } 
} 
+0

@Blazemonger Sí ... http: // jsfiddle.net/vKHbY/ –

1

Sintaxis incorrecta. No puede comparar un booleano con una cadena como "falso" o "verdadero". En su caso, sólo prueba que es inversa:

if(!ValidateForm()) { ... 

Usted podría de ensayo frente a la constante falsa, pero es bastante feo y generalmente mal visto:

if(ValidateForm() == false) { ... 
8

No es necesario llamar ValidateForm() dos veces, ya que está por encima. Usted sólo puede hacer

if(!ValidateForm()){ 
.. 
} else ... 

Creo que va a resolver el problema lo anterior parece que su comparación true/false a la cadena equivalente 'false'.

+0

El problema es que, si no incluyo 'ValidateForm();' en la función 'post()' ... los mensajes de error no se muestran .. – Ken

+0

En su ejemplo, la sentencia if siempre será falso, porque su función devuelve verdadero o falso, NUNCA devolverá 'falso'. Elimina las comillas simples de tu código que están alrededor de 'falso' y funcionará. Sin embargo, las sugerencias que he hecho mejorarán tu código, pero una vez que hayas corregido tu código. – JDandChips

+0

Usar .length en algo que no se puede definir es peligroso. cuando, de hecho, no está definido, devolverá el error "no se puede llamar a longitud indefinida" o algo similar. Difícil de ver, ya que en este caso en particular causaría una actualización de página. – NoobishPro

Cuestiones relacionadas