2012-09-14 72 views
8

我有一个函数在这里验证窗体中的字段是否为空。如何检查函数的返回值如果为真或假

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条件..有没有更好的方法来实现这一目标?

谢谢。

+0

是否有一个原因是你两次调用ValidateForm? –

+0

问题是,如果我不在'post()'函数中包含'ValidateForm();',错误消息不会显示.. – Ken

+0

它已经在if中调用了。在这之前你不必再打电话。 –

回答

13
false != 'false' 

为了获得良好的措施,把验证到变量的结果以避免双重验证并在IF语句中使用它。像这样:

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

您比较结果对一个字符串( '假')没有内置负常数(假)

只使用

if(ValidateForm() == false) { 

或更好,但

if(!ValidateForm()) { 

也为什么你要两次调用validateForm?

+0

问题是,如果我在'post()'函数中不包含'ValidateForm();'错误消息不显示.. – Ken

0

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

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

@Blazemonger是... http:// jsfiddle。net/vKHbY/ –

1

语法错误。您无法将布尔值与“false”或“true”等字符串进行比较。在你的情况,只是测试它的逆:

if(!ValidateForm()) { ... 

可以对恒虚测试,但它是相当丑陋,一般皱眉:

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

您不需要像以上那样调用ValidateForm()两次。你可以做

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

我认为,这将解决这一问题如上面它看起来像你的比较true/false字符串相当于'false'

+0

问题是,如果我不在'post()'函数中包含'ValidateForm();'错误消息不会显示.. – Ken

+0

在你的例子中if语句将永远是假,因为你的函数返回true或false,它永远不会返回'false'。从你的代码中删除单引号,这些引号是'假'的,它会起作用。但是,我已经提出的建议会改善您的代码地址,但您已修复代码后。 – JDandChips

+0

对可能未定义的东西使用.length是危险的。当它实际上未定义时,它将返回错误“无法调用undefined”或类似的东西。很难看到,在这种特殊情况下,它会导致页面刷新。 – NoobishPro

相关问题