摘要:这是一个基本的,独立的网络表单。只是html表单,包含了函数的JQuery。
我有一个表单,用于检查电子邮件和用户名的唯一性和有效性(电子邮件)。我正在使用JQuery onChange事件来调用每个函数,这是对php文件的Ajax调用。
用户名检查的JQuery如下:
$("#username").change(function() {
var username = $("#username").val();
var msgbox_username = $("#username_status");
var dataString = "username="+ username;
$("#username_status").html('<img src="images/loader.gif">Checking Availability.');
if (username != "" && username.length >= 6){
$.ajax({
Type: "POST",
url: "functions/check_username.php",
data: dataString,
success: function(msg_username) {
$("#username_status").ajaxComplete(function (event, request) {
if (msg_username == 'Username Ok') {
$("#username").removeClass("red").addClass("green");
msgbox_username.html('<font color="Green">Available</font>');
} else {
$("#username").removeClass("green").addClass("red");
msgbox_username.html(msg_username);
}
});
}
});
return false;
} else {
$("#username").removeClass("green").addClass("red");
msgbox_username.html('<font color="Red">Username of 6 or more characters is required</font>');
}
});
check_username.php文件如下:
<?php
$username = $_GET["username"];
include_once("../includes/connect.php");
$query = "SELECT username
FROM sss_users
WHERE username = '$username'";
$result = mssql_query($query);
if(mssql_num_rows($result) > 0 && strlen($username) >= 6) {
echo '<font color="#cc0000"><strong>' . $username . '</strong> is already in use. </font>';
} else {
echo 'Username Ok';
}
?>
继续使用模式,电子邮件JQuery:
$("#email").change(function() {
var email = $("#email").val();
var msgbox_email = $("#email_status");
var dataString = "email="+ email;
$("#email_status").html('<img src="images/loader.gif">Checking Availability.');
var atpos = email.indexOf("@");
var dotpos = email.lastIndexOf(".");
if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= email.length){
$("#email").removeClass("green").addClass("red");
msgbox_email.html('<font color="Red">Valid Email Required</font>');
} else {
$.ajax({
Type: "POST",
url: "functions/check_email.php",
data: dataString,
success: function(msg_email) {
$("#email_status").ajaxComplete(function (event, request) {
if (msg_email == 'Email Ok') {
$("#email").removeClass("red").addClass("green");
msgbox_email.html('<font color="Green">Available</font>');
} else {
$("#email").removeClass("green").addClass("red");
msgbox_email.html(msg_email);
}
});
}
});
return false;
}
});
电子邮件PHP:
<?php
$email = $_GET["email"];
include_once("../includes/connect.php");
$query = "SELECT email
FROM sss_users
WHERE email = '$email'";
$result = mssql_query($query);
if(mssql_num_rows($result) > 0) {
echo '<font color="#cc0000"><strong>' . $email . '</strong> is already in use. </font>';
} else {
echo 'Email Ok';
}
?>
他们每个人都单独工作,但是如果我在框中放入一个无效的用户名,然后放一个有效的电子邮件,就会调用check_username.php文件,无论框中是什么(有效或无效),它都认为它是一个有效的用户名。
一个例子是:
在OnChange事件
上调用所有函数1)输入用户名asdfasdf(可用)
2)从文本框中删除用户名asdfasdf(这样可以正常工作,显示用户名必须至少有6个字符)
3)输入任何有效的电子邮件
结果:有效的电子邮件正常工作,但用户名字段(空白)会回忆之前的内容(asdfasdf),并说它是有效的用户名(即使该字段仍为空白。)
希望这是有道理的。有什么建议?
解
如下所述,.ajaxComplete()正在使用该标记调用所有函数。因此,当我做出以下更改时,它起作用了:
$("#username_status").ajaxComplete(function (event, request) { ... code here ... });
更改为:
$("#username_status").ajaxComplete(function (event, request, settings) { ... code and new if statement ... });
然后我裹着
if(settings.url == 'functions/check_username.php') {}
验证码周围。此过程已完成用户名和电子邮件验证。
答案 0 :(得分:0)
http://api.jquery.com/ajaxComplete/
每当Ajax请求完成时,jQuery就会触发ajaxComplete 事件。任何和所有已注册的处理程序 此时执行.ajaxComplete()方法。
可能两个处理程序都被解雇了。