проверить форму перед отправкой данных - PullRequest
0 голосов
/ 09 августа 2011

Я пытаюсь проверить форму перед публикацией данных. В основном форма запрашивает код. После того, как пользователь нажимает кнопку отправки, нижеприведенный JavaScript проверяет, содержит ли код только цифры и имеет ли он длину 6 цифр. Если код действителен, то выполняется вызов ajax, вызывающий страницу verifybkcd.php, который выполняет запрос и проверяет, связан ли входной код с учетной записью. Каким-то образом форма всегда отправляется независимо от того, какой код я поместил. Казалось, что вызов ajax никогда не выполнялся, потому что ни одно из предупреждений внутри вызова не было запущено. (Я уверен, что путь к файлу verifybkcd.php правильный). Есть идеи?

     $(document).ready(function(){

    $("#bksubmit").click(function(e){


       var bkcode = $("#bkcode").val();

       var bkcode_format =/^\d{6}$/;
       if(bkcode_format.test(bkcode)){

          $("#err-box").text("");
          $("#recovform").submit(function(e){

            alert("alert on submit");


            $.post("accounts/verifybkcd.php",{bcd:bkcode}, function(data){
                    alert("alert inside post");
                    if(data !=''){
                         alert("alert on code exists");
                        e.preventDefault();
                        $("#err-box").text("No account found with that book code. Please try again.");

                    }
                    else{

                        alert("alert on valid");
                        $("#err-box").text("");


                    }
            });

        });

       }
       else{

         $("#err-box").text("Please enter a valid book code above");
         e.preventDefault();
       }


    });

Следующее взято из php файла, имеющего форму

     <div id="container">
     <?php
    if($_SERVER['QUERY_STRING']==''){
     ?>
    <div class="title"><h1>Forgot your password?</h1></div>
    <div class="description"><p>To reset your password, enter the book code that you used when you registered your account.</p></div>

        <form id="recovform" name="recovform" method="post" action="recovery.php?verifyuser" >
            <div id="bkbox">
                <label for="bkcode">Book Code:</label>
                <input id="bkcode" name="bkcode" type="text" />
                <input id="bksubmit" name="submit" type="submit" value="Submit"/>
            </div>
           <div id="err-box"></div>
        </form>
     <?php
    } 
     else if($_SERVER['QUERY_STRING']=='verifyuser'){

     ?>
       <div class="title"><h1>verify user</h1></div>
       <div class="description"><p>emails below</p></div>
    <?php
     }
     else{
        echo "<META   HTTP-EQUIV=REFRESH   CONTENT='0;URL=../err/404.php'>";
     }
    ?>
</div>

Кстати, я уверен, что с файлом verifybkcd.php все в порядке. Я проверил это с разными кодами. Он вернет строку, только когда нет учетных записей, связанных с входным кодом.


Проблема решена. Я заменил название кнопки отправки на что-то другое. Тогда это работало как волшебство. Также я сделал небольшое изменение в JavaScript следующим образом. Кажется, jquery не отправит форму, если вы назовете кнопку отправки «отправить». Кстати, я также изменил тип кнопки отправки на «кнопку» вместо «отправить»

    $(document).ready(function(){

    $("#bksubmit").click(function(e){


       var bkcode = $("#bkcode").val();

       var bkcode_format =/^\d{6}$/;
       if(bkcode_format.test(bkcode)){

          $("#err-box").text("");

            $.post("accounts/verifybkcd.php",{bcd:bkcode}, function(data){
                    if(data !=''){   
                        $("#err-box").text("No account found with that book code. Please try again.");
                    }
                    else{

                        $("#err-box").text("");
                        $("#recovform").trigger("submit");

                    }
            });

       }
       else{

         $("#err-box").text("Please enter a valid book code above");
       }


    });



    });

Ответы [ 2 ]

0 голосов
/ 09 августа 2011

в вашем примере вам не хватает:

})

в конце, чтобы закрыть ваш $ (документ). Уже в JavaScript.

0 голосов
/ 09 августа 2011

Первое место, если вы не хотите отправлять форму, тогда вам нужно return false в обработчике нажатия кнопки отправки. Проверьте, удовлетворяется ли это условие ниже.

$(document).ready(function(){

// Это предотвращает отправку формы $ ( "# Recovform"). Представить (функция (е) { e.preventDefault (); });

$("#bksubmit").click(function(e){

   var bkcode = $("#bkcode").val();

   var bkcode_format =/^\d{6}$/;
   if(bkcode_format.test(bkcode)){

      $("#err-box").text("");
      //$("#recovform").submit(function(e){

        //alert("alert on submit");


        $.post("accounts/verifybkcd.php",{bcd:bkcode}, function(data){
                alert("alert inside post");
                if(data !=''){
                    //alert("alert on code exists");
                    //e.preventDefault();
                    $("#err-box").text("No account found with that book code. Please try again.");

                }
                else{

                    //alert("alert on valid");
                    $("#err-box").text("");

                    $("#recovform").unbind('submit').submit(); 
                }
        });

    //});

   }
   else{

     $("#err-box").text("Please enter a valid book code above");
     return false;
   }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...