17

我在这里有一个函数可以验证表单中的字段是否为空。

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 条件下..有没有更好的方法来完成这个?

谢谢你。

4

5 回答 5

22
false != 'false'

对于好的措施,将 validate 的结果放入一个变量中以避免双重验证,并在 IF 语句中使用它。像这样:

var result = ValidateForm();
if(result == false) {
...
}
于 2012-09-14T13:38:02.290 回答
12

你不需要打电话ValidateForm()两次,就像你在上面一样。你可以做

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

我认为这将解决上述问题,看起来您与true/false字符串等效项进行比较'false'

于 2012-09-14T13:40:01.557 回答
4

您正在将结果与字符串 ('false') 进行比较,而不是内置的负常数 (false)

只需使用

if(ValidateForm() == false) {

或者更好

if(!ValidateForm()) {

还有你为什么要调用 validateForm 两次?

于 2012-09-14T13:37:05.540 回答
1

语法错误。您不能将布尔值与“false”或“true”之类的字符串进行比较。在你的情况下,只需测试它的逆:

if(!ValidateForm()) { ...

可以针对常量 false 进行测试,但它相当丑陋并且通常不受欢迎:

if(ValidateForm() == false) { ...
于 2012-09-14T13:37:52.540 回答
0

ValidateForm返回boolean,而不是string.
当你这样做时if(ValidateForm() == 'false'),是相同的if(false == 'false'),这是不正确的。

function post(url, formId) {
    if(!ValidateForm()) {
        // False
    } else {
        // True
    }
}
于 2012-09-14T13:37:28.283 回答