Я пытаюсь проверить форму перед публикацией данных. В основном форма запрашивает код. После того, как пользователь нажимает кнопку отправки, нижеприведенный 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");
}
});
});