web-dev-qa-db-fra.com

Comment vérifier la valeur de retour de la fonction si true ou false

J'ai une fonction ici qui valide les champs d'un formulaire s'ils sont vides.

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;
}

Maintenant, je voulais utiliser cette fonction ici:

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");
    });
}

J'ai essayé et je viens avec ça.

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");
    });
 }
}

Le problème est que la validation fonctionne. Cependant, la fonction .post() est exécutée même s’il existe un champ vide. Je suppose que c’est sur la condition if/else. Existe-t-il une meilleure façon d’y parvenir?

Je vous remercie.

11
Ken
false != 'false'

Pour de bonnes mesures, mettez le résultat de validate dans une variable pour éviter la double validation et utilisez-le dans l'instruction IF Comme ça:

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

Vous n'avez pas besoin d'appeler ValidateForm() deux fois, vous êtes au-dessus. Vous pouvez juste faire

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

Je pense que cela résoudra le problème ci-dessus. Cela ressemble à votre comparaison de true/false avec l'équivalent chaîne 'false'.

8
JDandChips

vous comparez le résultat à une chaîne ('false') et non à la constante négative intégrée (false)

juste utiliser 

if(ValidateForm() == false) {

ou mieux encore 

if(!ValidateForm()) {

aussi pourquoi appelez-vous validateForm deux fois?

3
ferry

Mauvaise syntaxe. Vous ne pouvez pas comparer un booléen à une chaîne telle que "false" ou "true". Dans votre cas, il suffit de tester l'inverse:

if(!ValidateForm()) { ...

Vous pourriez tester contre la constante fausse, mais c'est plutôt laid et généralement mal vu:

if(ValidateForm() == false) { ...
1
lc.

ValidateForm renvoie boolean, pas une string.
Lorsque vous faites cette if(ValidateForm() == 'false'), est identique à if(false == 'false'), ce qui n’est pas vrai.

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