2012-03-26 13 views
0

私の問題:私はそれのための初期はので、どのように関数の先頭から偽であるので、私は、でも、その真の場合、それは「偽」が見つかり有効な変数をチェックし、ここでjavascript変数が関数間で変更されないのはなぜですか?次のJavaScript機能付き

function ValidateDates() { 

var valid = false; 
birthD = $("#cp1_txtBirthDate").val(); 
initialD = $("#cp1_txtInitialDate").val(); 
var regexp = new RegExp("^([1-9]|(0|1|2)[0-9]|30)(/)([1-9]|1[0-2]|0[1-9])(/)((20|19|18)[0-9]{2})$"); 

if (birthD != "__/__/____" && initialD != "__/__/____") { 
    if (regexp.test(initialD) && regexp.test(birthD)) { 

     $.get("ValidateDates.aspx?BirthD=" + birthD + "&InitialD=" + initialD, function (data) { 
      if (data == 0) { 
       valid = true; 

       $("#Dates_span").html(""); 
      } 

      else { 
       $("#Dates_span").html("*" + data); 
       valid = false; 

      } 

     }); 

    } 
} 

return valid; 
} 

それを解決し、何が間違っていますか?

+0

あなたは何が間違っているのかを明確に記述していません。 – gideon

答えて

6

非同期呼び出しを行っているときは、そのような値を返すことはできません。 、そして、

function ValidateDates(callback) { 

    var valid = false; 
    birthD = $("#cp1_txtBirthDate").val(); 
    initialD = $("#cp1_txtInitialDate").val(); 
    var regexp = new RegExp("^([1-9]|(0|1|2)[0-9]|30)(/)([1-9]|1[0-2]|0[1-9])(/)((20|19|18)[0-9]{2})$"); 

    if (birthD != "__/__/____" && initialD != "__/__/____") { 
     if (regexp.test(initialD) && regexp.test(birthD)) { 

      $.get("ValidateDates.aspx?BirthD=" + birthD + "&InitialD=" + initialD, function(data) { 
       if (data == 0) { 
        valid = true; 

        $("#Dates_span").html(""); 
       } 

       else { 
        $("#Dates_span").html("*" + data); 
        valid = false; 

       } 
       callback(valid); 
      }); 
     } 
    } 
} 

好きそれを呼び出す:代わりに、コールバックに渡す必要が間違っているのです

ValidateDates(function(isValid) 
{ 
    // Do something with isValid 
}); 
+0

本当にありがとう助け:) –

+0

申し訳ありませんが、私は何かにこだわって、私は戻り値がこのような他の関数で条件を使用する:if(Page_ClientValidate()&& ValidateName()&& ValidNull && ValidateDates)どのようにこれに対処するには? –

+0

ValidateDatesが唯一の非同期のものであれば、他のものを関数の中に入れることができます。それ以外の場合は、複数の関数を使用して非同期呼び出しを連鎖させることができます。 –

1

$.getは、その手段が機能を待たないということは何か、非同期呼び出しであるということです結果が$.getコールから返されるまで。単に呼び出しを行い、実行を続ける - が返された後で、valid = trueが長く設定されている。

関連する問題