我正在尝试制作一些表格验证功能。这就是我所拥有的:
<script>
$(document).ready(function() {
var myObj = {};
$('#username').keyup(function () {
id = $(this).attr('id');
validateUsername(id);
});
function validateUsername(id){
var username = $("#"+id).val();
$.ajax({
url : "validate.php",
dataType: 'json',
data: 'action=usr_id&id=' + username,
type: "POST",
success: function(data) {
if (data.ok == true) {
$(myObj).data("username","ok");
} else {
$(myObj).data("username","no");
}
}
});
} // end validateusername function
$('#submit').click(function(){
if (myObj.username == "ok") {
alert("Username OK");
} else {
alert("Username BAD");
}
});
}); // end doc ready
所以你可以看到,当在文本框中按下某个键时,它会检查它是否有效。 “data.ok”正确返回。问题是基于响应,我定义$(myObj).username。出于某种原因,我无法在validateusername函数之外使用此值。单击提交按钮时,它不知道$(myObj).username的值是什么。
我需要使用这样的东西,因为要在页面上使用多个表单字段进行验证,我可以执行以下操作:
if (myObj.username && myObj.password && myObj.email == "ok")
...在提交表单之前检查我的所有表单字段。
我知道我必须错过一些基本的东西......任何想法?
编辑:已解决
我所要做的就是将 var myObj = {}; 更改为 myObj = {}; ,它就像魅力一样。我想我已经盯着这个屏幕太久了!
答案 0 :(得分:2)
您没有访问正确存储的数据。以这种方式访问用户名值:
$(myObj).data("username")
<强>资源:强>
看一下jQuery的.data() docs。
Very simple jsFiddle展示了如何使用jQuery的.data()方法正确设置和检索数据。
答案 1 :(得分:0)
我会将promise存储在该全局变量中,然后在提交按钮单击中将事件绑定到done事件。
$(document).ready(function() {
var myObj = false;
$('#username').keyup(function () {
id = $(this).attr('id');
validateUsername(id);
});
function validateUsername(id){
var username = $("#"+id).val();
myObj = $.ajax({
url : "validate.php",
dataType: 'json',
data: 'action=usr_id&id=' + username,
type: "POST",
success: function(data) {
$('#username').removeClass('valid invalid');
if (data.ok == true) {
$('#username').addClass('valid');
}
else {
$('#username').addClass('invalid');
}
}
});
} // end validateusername function
$('#submit').click(function(){
// if myObj is still equal to false, the username has
// not changed yet, therefore the ajax request hasn't
// been made
if (!myObj) {
alert("Username BAD");
}
// since a deferred object exists, add a callback to done
else {
myObj.done(function(data){
if (data.ok == true) {
alert("Username BAD");
}
else {
alert("Username OK");
}
});
}
});
}); // end doc ready
您可能希望为keyup事件添加一些限制,以防止多个ajax请求一次处于活动状态。