JQuery отправить не работает - PullRequest
0 голосов
/ 11 августа 2011

Я не могу получить эту форму, чтобы отправить правильно.Если у меня есть тип кнопки как «submit», он всегда отправляет, и если я использую «button» в качестве типа, который он никогда не передает, вызов ajax возвращает правильные значения, так что даже если оператор if следует по правильному пути, но онКажется, не имеет значения.

<script type="text/javascript">
$(document).ready(function(){
 $("#submitButton").click(function(e) {
        var un  = $('#username').val();
        $('#mike').html("");       
            $.ajax(
            {              
                type: "POST",
                url: "Utilities/CheckUsername.php",
                data: "un="+ un,
                success: function(data2)
                {                  
                   if(data2=="Username Does Not Exist")
                    {         
                       $("#login2").submit();                   
                    }
                    else
                    {
                        $('#mike').html(data2);
                        return false;                      
                    }                   
                }

            });
             });

             }); 
             </script>
</head>
<body>
      <form name="login" id="login2" method="post" action="dsds.html">
        UserName<input type="text" name="username" id="username"value="">
        <br/>
        Password<input type="text" name="password" id="password" value="">
        <br/>
        Password Again<input type="text" name="passwordagain" id="passwordagain" value="">
        <br/>
        <input type="hidden" name="NewClass" id="NewClass" value="true">
        <br/>
        <input type="submit" name="no" id="submitButton" value="submit">
     </form>
     <span id = "mike"></span>
</body>
</html>

РЕДАКТИРОВАТЬ: Я добавил сюда возвращаемое значение false, и это работает, но почему?Я просто возвращаю false из события click

else
            {
                $('#mike').html(data2);

            }                   
        }

    });
     return false;
     });

Ответы [ 2 ]

3 голосов
/ 11 августа 2011

Вам просто нужно return false из вашего обработчика событий отправки.return false, который у вас есть, не выполняется до после асинхронного вызова ajax.

В качестве альтернативы вы можете использовать e.preventDefault(), что делает то же самое.1009 * Оба метода просто предотвращают возникновение поведения по умолчанию, то есть отправки формы.

2 голосов
/ 11 августа 2011

Я предлагаю вам связать обработчик событий с событием submit в форме:

$('#login2').submit(function(event) {
    event.preventDefault();
    //...
});

Необходимо запретить действие по умолчанию для события, при котором отправляется форма. Это делается с помощью event.preventDefault [документы] . return false внутри обратного вызова Ajax не будет иметь никакого эффекта, поскольку обработчик события возвращает до ответа, полученного.

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

var nameAvailable = false;

$('#login2').submit(function(event) {
    if(!nameAvailable) {
        event.preventDefault(); // don't submit form
        //...
        $.ajax({
            success: function() {
                // if name available
                nameAvailable = true;
                $('#login2').submit();
            }
        });
     }
});
...