我正在使用jquery ajax编写注册表单。我的jQuery代码如下:
function validateData()
{
var email = jQuery("#email").val();
var username = jQuery("#username").val();
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
var regex = new RegExp(/^\+?[0-9(),.-]+$/);
if(!emailReg.test(email))
{
alert('Please enter valid email');
return false;
}
var agreement = jQuery("#agereement").is(":checked");
if(agreement == false)
{
alert("Please agree with the agreement !!! ");
return false;
}
var pass = jQuery("#password").val();
var repass = jQuery("#repeatpass").val();
if(pass != repass)
{
alert("Password & Repeat Password Should be same");
return false;
}
var FirstData = "email=" + email+"&username="+username;
var url = "ajaxcheck.php";
jQuery.ajax({
dataType : 'html',
type: 'GET',
url : url,
data : FirstData,
complete : function() { },
success: function(data)
{
if(data == '')
{
alert("No Problem");
var flag = "true";
}
else{
alert("Username Or Email ID Already Exists");
var flag = "false";
}
}
});
alert(flag);
return flag;
}
</script>
当我提交表单并输入已存在于DB中的用户名值时,它会提醒Username Or Email ID Already Exists
但提交表单而不是留在页面上。如果出现错误我该怎么办呢?它应该留在页面而不是提交表格
答案 0 :(得分:2)
当你写:
var flag = "true";
…
var flag = "false";
…
return flag;
问题是"true"
和"false"
是strings,其中包含单词“true”或“false”。要获取实际的boolean值true
或false
,请删除引号:
var flag = true;
…
var flag = false;
…
return flag;
事件处理程序只能理解布尔返回值,而不是字符串。
答案 1 :(得分:1)
在表单标记中使用onsubmit
<form onsubmit="return validateData();">
....
<input type="submit">
</form>
答案 2 :(得分:1)
我试图从另一个角度帮助你。
以下是如何进行表单验证的示例(使用bootstrap / php / jquery):http://formvalidation.io/examples/contact-form/
Ajax&#34; .done&#34;当你从服务器得到一个成功的响应并且&#34; .fail&#34;发送请求或收到响应失败时发生。假设您要检查电子邮件是否存在,那么您可以使用以下行中的内容:
if(response.IsEmailValid === 'false')
{
$('#alertContainer')
.removeClass('alert-success')
.addClass('alert-warning')
.html('Sorry, email has been taken')
.show()
}
答案 3 :(得分:0)
您将flag
设置为字符串,而不是布尔值。尝试使用true
和false
代替"true"
和"false"
,这两者都是真实的。