2012-09-14 10 views
8

空の場合は、フィールドのフィールドを検証する関数があります。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条件でそれを推測する。これを達成するための良い方法があるのだろうか?

ありがとうございます。

+0

ValidateFormを2回呼び出す理由はありますか? –

+0

問題は、 'ValidateForm();'が 'post()'関数に含まれていないとエラーメッセージが表示されない.. – Ken

+0

これはすでにif内部で呼び出されています。それ以前にもう一度呼び出す必要はありません。 –

答えて

13
false != 'false' 

、置きます変数への検証の結果、二重検証は回避され、IF文で使用されます。このように:

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

あなたはまだ

if(!ValidateForm()) { 

if(ValidateForm() == false) { 

以上を使用して文字列( '偽')ではない内蔵の負の定数(偽)

に対する結果を比較しています

なぜvalidateFormを2回呼び出すのですか?

+0

問題は、 'ValidateForm();'が 'post()'関数に含まれていないと、エラーメッセージは表示されません.. – Ken

0

ValidateFormは、stringではなく、booleanを返します。
if(ValidateForm() == 'false')の場合は、if(false == 'false')と同じですが、これは真ではありません。

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

@Blazemongerはい... http:// jsfiddle。net/vKHbY/ –

1

誤った構文です。 Booleanを "false"や "true"のような文字列と比較することはできません。あなたのケースでは、ちょうどそれが逆のテスト:

if(!ValidateForm()) { ... 

あなたは、一定の偽に対するテストはできるが、それはむしろ醜いだと一般的に眉をひそめる:良い対策のために

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

上記のとおり、ValidateForm()を2回呼び出す必要はありません。あなたはただ、私はそれはあなたが'false'同等の文字列にtrue/falseを比較するようになります。上記のように、その問題が解決すると思います

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

を行うことができます。

+0

問題は、 'ValidateForm();'が 'post()'関数に含まれていないとエラーメッセージが表示されない.. – Ken

+0

あなたの例では、if文は常にfalseは、関数がtrueまたはfalseを返すため、決して 'false'を返しません。あなたのコードから一重引用符を取り除いて '偽'にするとうまくいきます。しかし、私が行った提案は、あなたのコードを改善するでしょう。 – JDandChips

+0

.lengthを未定義にすることは危険です。実際には定義されていないときは、 "定義されていない長さを呼び出すことはできません"というエラーを返します。この特定の場合のように見えにくいと、ページが更新されます。 – NoobishPro

関連する問題