Присоединение проверки jquery в .post работает, но не в .get - PullRequest
1 голос
/ 10 сентября 2011

Я использую плагин проверки jquery для проверки динамически загружаемой формы.В некоторых случаях я загружаю контент, используя $ .post, и в обратном вызове я вызываю функцию, которая добавляет правила проверки.Это работает.Для некоторого контента я использую $ .get, и в этом обратном вызове я также вызываю функцию, которая добавляет правила проверки.Однако при использовании $ .get форма вообще не проверяется.

В чем моя проблема?Есть ли какая-то разница с использованием post и get с этой точки зрения?

Я думаю, что это важный код, но я добавил много кода после этого на случай необходимости.Здесь я вызываю функцию, которая добавляет правила проверки:

  $.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 Ответ

1 голос
/ 10 сентября 2011

Вы вызываете .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();
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...