Как проверить возвращаемое значение функции, если значение true или false

у меня есть функция, которая проверяет поля в форме, если они пусты.

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

теперь я хотел использовать эту функцию здесь:

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

я попробовал, и я придумал это.

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

проблема в том, что проверка работает.. однако, .post() функция работает, даже если есть пустое поле. Я думаю, это на условии if/else.. есть ли лучший способ добиться этого?

спасибо.

5 ответов


false != 'false'

для хороших мер поместите результат validate в переменную, чтобы избежать двойной проверки, и используйте это в операторе IF. Вот так:

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

вам не нужно звонить ValidateForm() дважды, как вы выше. Вы можете просто сделать

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

Я думаю, что это решит проблему, как указано выше, похоже на ваше сравнение true/false к строковому эквиваленту 'false'.


вы сравниваете результат со строкой ('false'), а не со встроенной отрицательной константой (false)

просто использовать

if(ValidateForm() == false) {

или еще лучше

if(!ValidateForm()) {

также почему вы дважды вызываете validateForm?


неправильный синтаксис. Вы не можете сравнить логическое значение со строкой типа "false" или "true". В вашем случае просто проверьте, что он обратный:

if(!ValidateForm()) { ...

вы мог бы тест против постоянной false, но это довольно уродливо и вообще нахмурился:

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

ValidateForm возвращает boolean,а не string.
Когда вы это делаете if(ValidateForm() == 'false'), это же if(false == 'false'), что неверно.

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