2011-09-12 8 views
0

を働いていない - 下記を参照してください:)私はjQueryのプラグインを検証し、何らかの理由で、私はそれが有効なフィールドを返すために取得することはできません使用していjQueryの検証ルールは固定

- 常に無効を返します。私はとしての機能を修正する場合 - ここで

http://plugins.jquery.com/project/jqueryvalidate

が見つかりました。または任意の特定のアドレスが見つかりませんように私は

 $(function(){ 
      $("#address").validate({ 
       valid: function(val){ 
        $.getJSON("http://maps.google.com/maps/geo?q="+ escape(val) +"&key=ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA&sensor=false&output=json&callback=?", 
        function(data, textStatus) 
        { 
         if(data.Status.code=='200') 
         { 
          return true; 
         }else{ 
          return false; 
         } 
        }); 

       }, 
       errorMessage: function(val){ 
        return "must geo code"; 
       }, 
       appendCompletionIcon: true 
      }); 
     }); 

私は戻ってくるGEOコードのリクエストを見ることができましたが、検証がまだ失敗したものです私は、有効なアドレスまたは無効なアドレスに関してアラート「はい」または「警告しない」を取得しますが、検証はまだ失敗します。

    function(data, textStatus) 
        { 
         if(data.Status.code=='200') 
         { 
          alert('yes'); 
          return true; 
         }else{ 
          alert('no'); 
          return false; 
         } 
        }); 

すべてのヘルプは


をいただければ幸い私はそれが2つの地域コードが完了するまでに呼び出しを取るとして、それは非常にきれいではありません、この周りをハックする方法を見つけました。私の目的のために十分に良い。

var geocode = false; 
function geoadd() 
{ 
    $.getJSON("http://maps.google.com/maps/geo?q="+ $("#address").val() +"&key=ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA&sensor=false&output=json&callback=?", 
    function(data, textStatus) 
    { 
     if(data.Status.code=='200') 
     { 
      geocode = true; 
     }else{ 
      geocode = false; 
     } 
    }); 
} 

     $(function(){ 
      $("#address").validate({ 
       valid: function(val){ 
        geoadd(); 
        return geocode; 
       }, 
       errorMessage: function(val){ 
        return "must not be blank"; 
       }, 
       appendCompletionIcon: true 
      }); 
     }); 

答えて

1

値は、あなたのvalidハンドラがtrueまたはfalse、nullでないから返されたので、あなたの検証は関係なく、AJAX呼び出しのステータスの失敗。

trueまたはfalseの値は、valid関数から真偽値を返すものと同じではないajaxの完全ハンドラによって返されます。

この問題を解決するには、同期Ajaxコールを作成する必要があります(応答待ちのユーザーインターフェイスをロックするのでお勧めしません)。あるいは、検証プラグインを使用して検証をサポートしていますajaxが呼び出します。

+0

ありがとう、50以上のフィールドがあるので、私はそれをハックすることができると思いますか?おそらく関数を使用して、地理コードの結果に応じて値1または0の隠しフォームフィールドを設定し、それに対して検証しますか?それとも私はまだ私の時間を無駄にしていますか?ありがとう、 –

+0

うん、それは動作する可能性があります。地理コードのチェックのためにあなたのajax呼び出しをトリガーし、次にajaxレスポンスハンドラで必要な処理を行います(レスポンスに基づいて#addressフィールドを有効または無効にします)。 – WTK

関連する問題