2012-01-11 6 views
0

jqueryバリデーションプラグインの使用に若干の問題があります。ajaxリクエストによって返されるレンダリングされたフォームでjquery.valideteを使用する方法

通常のページロード中にレンダリングされる静的なフォームでは完全に機能します。私が検証に使用 コードは、私はそれが動作しません同じIDでポップアップフォームを作成するために、AJAX要求を使用するときに問題があるこの

$('#form_name).validate({ (...) and other stuff 

likieものになります。

私はここに来たので、この問題は適切な答えを見つけることができませんでした。 ..など「提出」

オウおよび他の質問にページ場所を防ぐために、私は便利かもしれない方法を生きる。$()は推測するが、私は「クリック」などのいかなる場合にそれを使用する方法が分かりません新しいajaxフォームがロードされる場所は、静的フォームがレンダリングされるページ以外の場所にあります。したがって、同じページに2つの同一フォームの競合はありません。

答えて

0

私は以前この問題に遭遇しました。新しく追加されたAjaxコンテンツは、トリガーを再初期化する必要があります。あなたが取ることができるいくつかのアプローチがあります。以下はそのうちの一つです。

関数内にjavasciprtバインドトリガーを配置し、ajax要求の後に呼び出します。

<html> 
<script type="text/javascript"> 

// when page has loaded do the binds 
$(document).ready(function(){ 
    initBinds(); 
}); 

// This is your ajax request psuedo code 
function someAjaxRequest(){ 

    // 1) do some ajax request then 
    // 2) load the data 
    // 3) after this has been done then call initBinds() 
      function to re-init new data with bind triggers 
} 

function initBinds() { 
    $('#someID').bind('click', function(){ 
    // blah blah 
    }) 


    $('#someOtherID').bind('click', function(){ 
    // blah blah 
    }) 

} 
</spript> 

</html> 
+0

ご回答ありがとうございます。あなたが言ったように、この問題の解決策はいくつかあります。私はあなたの言うことをほとんど行い、それはうまく動作します。違いは、すべての検証コードを定義された関数(この場合は* initBinds *)に入れて、それを2回呼び出すことです:ドキュメントの準備ができていて、ajaxリクエストでクリックなどのイベントをバインドする必要がありません。私に正しい方向を示してくれてありがとう。 – tetsujinsan

+0

.bindを.live(私は思う)に変更することもできます。これは、常に聴くようにトリガーを変更する必要があります。 .live()のドキュメントは100%覚えていないので、それをどのように動作させるのか覚えておく必要があります。 –

関連する問題