2012-09-14 69 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

相關問題