Я считаю, что проблема в том, что вы получаете неопределенное значение в качестве возвращаемого значения от вашего вызова validateEmail ().
Это потому, что ваш ajax-запрос выполняется асинхронно и функция validateEmail () завершается до того, как вы получите результат. Одним из решений (на мой взгляд, плохого) было бы установить для параметра async значение false в запросе ajax.
$.ajax({
type: "POST",
data: "email="+email.val(),
url:'emailcheck.php',
async: false,
beforeSend: function(){
$("#emailerror").html("Checking Email...");
}
В противном случае я бы порекомендовал это. Независимо от того, что вы инициируете ваш вызов на отправку, вы можете вместо этого вызвать validateEmail (), а затем вызвать вызов оттуда.
validateEmail(); //Instead of trigger submit you call this function.
function validateEmail(){
if(email.val() == "")
{
$("#emailerror").html("Enter Email...");
return false;
}
else {
$.ajax({
type: "POST",
data: "email="+email.val(),
url:'emailcheck.php',
beforeSend: function(){
$("#emailerror").html("Checking Email...");
},
success: function(data){
if(data == "invalid")
{
$("#emailerror").html("Invalid Email");
return false;
}
else if(data != "0")
{
$("#emailerror").html("Email Already Exist");
return false;
}
else
{
$("#emailerror").html("OK");
$('#myForm').submit(); //Here you trigger submit.
return true;
}
}
});
}
}
Возможно, у вас есть другие функции проверки, но я думаю, что вы также сможете управлять этим.