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

上記のように、2 回呼び出す必要はありませんValidateForm()。あなたはただすることができます

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

true/false上記のように、同等の文字列と比較すると問題が解決すると思います'false'

于 2012-09-14T13:40:01.557 に答える
4

組み込みの負の定数 (false) ではなく、文字列 ('false') に対して結果を比較しています。

ただ使う

if(ValidateForm() == false) {

またはさらに良い

if(!ValidateForm()) {

また、validateForm を 2 回呼び出すのはなぜですか?

于 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 に答える