Jquery实时输入验证.发布功能
Jquery real time input validation with $.post function
大家好:
我对Jquery和web开发有点陌生,所以请耐心听我说。我想在我的网站上用Jquery实现实时输入验证。也许我在这篇文章中有一些语法错误,但我确信我在实际代码中没有任何语法错误。
这就是我所拥有的,每当用户输入非空白的东西时,error()将被调用,并向服务器(PHP+MySQL)发出post请求,以检查输入值是否已经存在。当提交按钮被按下时,还会再次使用error()。
在我按下提交按钮之前,这个工作得很好。如果我输入已经存在的内容,则不会提交表单。但是,如果我输入新的内容,即使数据仍然插入到数据库中,我仍然会得到("exists")文本。我总是会在("成功")之后得到("存在")。似乎当我提交时,来自error()的.post请求是在表单的.post请求之后发出的。有谁能解决这个bug吗?或者另一种方式来构建这种类型的输入验证??由于
$('.unique').change(function(){
error($(this));
});
function error(obj)
{
var ok = true;
if(obj.val().length == 0)
{
alert('This field can not be blank');
ok = false;
}
else
{
var data = "action=check&input=" + obj.attr('name') + "&value=" + obj.val();
$.post('database.php',
data,
function(reply){
if(reply == true)
{
alert("This " + obj.attr('name') + " already exists");
ok = false;
}
});
}
return ok;
}
//When the user submits the form
$('#info').submit(function(){
var ok = true;
var data = 'action=insert&' + $(this).serialize();
//Passes each input to the error()
$('.unique').each(function{
var temp = error($(this));
ok = ok && temp;
});
if(!ok) return false;
$.post('database.php',
data,
function(reply){
alert(reply);
});
});
<form id="info" name="info" action="" method="post">
<input type ="text" class = "unique" id = "username" name = "username" class = "unique">
<input type ="text" class = "unique" id = "email" name = "email" class = "unique">
</form>
//On the server
if(isset($_POST['action']))
{
if($_POST['action'] == 'check')
{
$query = sprintf("select * from Users where %s = '%s'",
$_POST['input'],
$_POST['value']);
$result = mysql_query($query);
if(mysql_num_rows($result) > 0)
{ echo true;}
else
{ echo false;}
}
else
{
$query = sprintf("insert into Users(username, email) values('%s','%s')",
$_POST['username'],
$_POST['email']);
if(!($result = mysql_query($query)))
die(mysql_error());
echo 'Success';
}
}
我过去遇到过这个问题。您可以避免这种情况以防止默认行为:
$('#info').submit(function(e){
e.preventDefault();
var ok = true;
var data = 'action=insert&' + $(this).serialize();
//Passes each input to the error()
$('.unique').each(function{
var temp = err($(this));
ok = ok && temp;
});
if(!ok) return false;
$.post('database.php',
data,
function(reply){
alert(reply);
});
});
这将避免表单实际被提交。如果您仍然想在ajax post ok时提交它:
$('#info').submit(function(){
var theForm = this;
$.post('database.php',
data,
function(reply){
alert(reply);
theForm.submit();
});
});
有几个问题立即凸显出来。第一个错误函数总是返回false。第二个美元。Post是异步的。这意味着它将继续执行代码,同时等待ajax请求的响应。您可以在jquery中更改,我使用$.ajaxSetup({async:false});
之前的$。post请求。
下面的代码示例应该可以正常工作:
$('.unique').change(function(){
error($(this));
});
function error(obj)
{
var ok = true;
if(obj.val().length == 0)
{
alert('This field can not be blank');
ok = false;
}
else
{
var data = {
action: 'check',
input: obj.attr('name'),
value: obj.val()
};
$.ajaxSetup({async:false}); // Force program execution to wait for ajax response
$.post('database.php', data, function (reply) {
if (reply) {
alert("This " + obj.attr('name') + " already exists");
ok = false;
}
$.ajaxSetup({async:true}); // Setup ajax to be async again
});
}
return ok;
}
//When the user submits the form
$('#info').live('submit', function(e){
e.preventDefault();
var ok = true;
//Passes each input to the error()
$('.unique').each(function(){
ok = ok && error($(this));
});
if (!ok) {
return false;
}
$.post('database.php', 'action=insert&' + $(this).serialize(), function(r) {
alert(reply);
});
});
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 删除CKEditor工具栏按钮,但不删除功能
- 异步facebook功能
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- jQuery滚动功能只工作一次
- Graphiti中是否有任何工具提示功能
- React redux初始化功能,无论状态变化如何
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 正在获取select上的功能id
- 石头剪刀布游戏功能在Javascript
- “功能”就是功能,这怎么可能
- 最有效:不同的功能/一个功能有案例
- 为什么这个功能CPS功能在Chrome中有效,而在其他浏览器中无效
- 解释";您可以具有改变其他功能的功能"