【问题标题】:How to check the function's return value if true or false如何检查函数的返回值是真还是假
【发布时间】:2012-09-14 13:31:41
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 您调用 ValidateForm 两次是否有原因?
  • 问题是,如果我在post() 函数中不包含ValidateForm();.. 错误消息不会显示..
  • 它已经在 if 中被调用了。在此之前您不必再次调用它。

标签: jquery forms if-statement


【解决方案1】:
false != 'false'

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 问题是,如果我在post() 函数中不包含ValidateForm();.. 错误消息不会显示..
    • 在您的示例中,if 语句将始终为 false,因为您的函数返回 true 或 false,它永远不会返回“false”。从您的代码中删除“false”周围的单引号,它将起作用。但是,我提出的建议将改进您的代码 - 解决您修复代码后的问题。
    • 在可能未定义的内容上使用 .length 是危险的。如果它实际上是未定义的,它将返回错误“无法在未定义时调用长度”或类似的东西。在这种特殊情况下很难看到它会导致页面刷新。
    【解决方案3】:

    您将结果与字符串 ('false') 而非内置负常数 (false) 进行比较

    只需使用

    if(ValidateForm() == false) {
    

    或者更好

    if(!ValidateForm()) {
    

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

    【讨论】:

    • 问题是,如果我在post() 函数中不包含ValidateForm();.. 错误消息不会显示..
    【解决方案4】:

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

    if(!ValidateForm()) { ...
    

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

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-31
        • 2022-08-18
        • 2019-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-23
        • 1970-01-01
        相关资源
        最近更新 更多