2011-09-10 1 views
1

jquery validateプラグインを使用して、動的に読み込まれたフォームを検証しています。場合によっては、$ .postを使用してコンテンツをロードしています。コールバックでは、検証ルールを追加する関数を呼び出します。それは動作します。一部のコンテンツでは、私は$ .getを使用しています。そのコールバックでは、検証ルールを追加する関数も呼び出しています。しかし、$ .getを使用すると、フォームはまったく検証されません。.postでjqueryの検証をアタッチしても動作しません。

私の問題は何ですか?投稿を使って実際にどのような違いがありますか?

私はこれが重要なコードだと思いますが、必要に応じてこの後多くのコードを追加しました。私は検証ルールを追加する関数を呼び出す場所です:

$.get("http://localhost/SMICAdmin/adminactivities/admin_update_agent.php", { agent_id: $agentid }, function(data){ 
        //Now, add the validation rules: 
        addUpdateAgentValidation(); 

        $('#dialog-modal').dialog("option", "title", 'Uppdatera agent'); 
        $("#dialog-modal").html(data).dialog("open"); 

これは、フォームを読み込むコードです:

ここ
$("#agents td").live('click',function(event) 
     { 
      //alert("Agents"); 
      event.preventDefault(); 

      var col = $(this).parent().children().index($(this)); 

      var $td= $(this).closest('tr').children('td'); 
      var $agentid=$td.eq(2).text(); 
      var $name=$td.eq(3).text(); 

      if(col==0){ 

       $.get("http://localhost/SMICAdmin/adminactivities/admin_update_agent.php", { agent_id: $agentid }, function(data){ 
        //alert("GETDONE"); 
       //Now, add the validation rules: 
       addUpdateAgentValidation(); 

       $('#dialog-modal').dialog("option", "title", 'Uppdatera agent'); 
       $("#dialog-modal").html(data).dialog("open"); 


       }); 
       //and the rest of the code 
       //. 
       //. 

は、検証ルールを追加するための機能である:

function addUpdateAgentValidation(){ 
     //alert("GETDONE 2"); 
        $("#updateagentform").validate({ 
          errorContainer: "#updateagentmessagebox", 
          errorLabelContainer: "#updateagentmessagebox ul", 
          wrapper: "li", debug:true, 


          rules: { 


           email1: {// compound rule 
           // required: true, 
           email: true 


           }, 
           email2: { 
            // required: true, 
            equalTo: "#email1" 
           }, 
           username: { 
           // required: true, 
            remote: "http://localhost/SMICAdmin/smicsoap/soap_is_agentusername_available.php" 

           }, 
           password: { 
           // required: true         
           }, 

           password2: { 
            //required: true, 
            equalTo: "#password1" 
           } 
          }, 
          messages: { 

           email1: {// compound rule 
           email: "Korrekt emailadress saknas" 

           }, 
           email2: { 
            equalTo: "Mailadresserna matchar inte varandra" 
           }, 
           //username: "Anv‰ndarnamnet mÂste vara unikt" 
           username: { 
            remote: "Användarnamn finns redan" 
           }, 


           password2: { 
            equalTo: "Lösenord inte lika" 
           } 
          } 
          }); 
        }; 

これは私がフォームを投稿するところです:

$("#updateagentform").live("submit", function(e){ 
       //Prevent the form from submitting normally 

      // alert("Trying to submit user update"); 

      e.preventDefault(); 

      $.post("http://localhost/SMICAdmin/adminactivities/admin_update_agent.php",$(this).serialize(),function(msg){ 
       //alert the response from the server 
       //alert(msg); 
       $("#dialog-modal").dialog("close"); 

      }); 
      $("#usertable").empty(); 
      $('#usertable').load("http://localhost/SMICAdmin/adminactivities/admin_load_agents.php"); 
      $("#modalarea").empty(); 
      $('#modalarea').css("visibility","hidden"); 
     }); 

とコードフォームを生成:

echo "<div class='errormessage' id='updateagentmessagebox'> 
       <ul></ul> 
      </div> 
      <form id='updateagentform' method='post'> 
       Ändra önskade fält<br/> 
       * Förnamn: <input type='text' name='firstname' /> <br/> 
       * Efternamn: <input type='text' name='surname' /> <br/> 
       * Email: <input id='email1' type='text' name='email1' /> <br/> 
       * Repetera email: <input id='email2' type='text' name='email2' /> <br/> 

       * Användarnamn: <input id='username_ID' type='text' name='username' /><br/> 
       * Lösenord: <input id='password1' type='text' name='password' /><br/> 
       * Repetera lösenord: <input id='password2' type='text' name='password2' /><br/>"; 
     foreach ($roles as $key=>$role) { 
      if(in_array($key, $role_ids)){ 
       echo "<input type='checkbox' name='rid".$key."' value='rid".$key."' checked />".$role."<br/>"; 
      }else{ 
       echo "<input type='checkbox' name='rid".$key."' value='rid".$key."' />".$role."<br/>"; 
      } 

     } 

     echo "<input id='submitupdateagentform' type='submit' value='Uppdatera agent' /></form>"; 

私の問題とどのように私はそれを修正すればよいとは何ですか?

答えて

1

まだページに存在しないフォームで.validate()を呼び出しています。

$.get("http://localhost/SMICAdmin/adminactivities/admin_update_agent.php", { agent_id: $agentid }, 
    function(data){ 
     // form does not exist in DOM here 
     addUpdateAgentValidation(); 

     $('#dialog-modal').dialog("option", "title", 'Uppdatera agent'); 
     // form exists after this line. 
     $("#dialog-modal").html(data).dialog("open"); 
    }); 

あなたは.validate()呼び出されるように、フォームがDOMに付加されます後に関数呼び出しを再配置する必要があります働いた

$.get("http://localhost/SMICAdmin/adminactivities/admin_update_agent.php", { agent_id: $agentid }, 
    function(data){ 
     $('#dialog-modal').dialog("option", "title", 'Uppdatera agent'); 

     $("#dialog-modal").html(data).dialog("open"); 
     addUpdateAgentValidation(); 
    }); 
+0

おかげで、。実際には、私はあなたがスタードと同じ理由で、このようにしようとしましたが、どうしてそれはうまくいかないのですか?:$( "#dialog-modal")html(data、function(){ addUpdateCustomerUserValidation(); }}) .dialog( "open"); – Nicsoft

+1

@Nicsoft:それは '.html()'の関数の引数のバージョンがあなたが関数から新しいHTMLを返すことを期待しているからです。 HTMLが追加された後に実行されるコールバック関数ではありません。 –

+0

私は、関数が実行された後は通常のコールバックだと思っていました。私は関数を呼び出す前に、関数がロードされていることを確認するためにそこに置いていました。今私はよく知っている。ありがとう! – Nicsoft

関連する問題