0

摘要:这是一个基本的、独立的 Web 表单。只是 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') {} 

围绕验证码。此过程针对用户名和电子邮件验证完成。

4

1 回答 1

0

http://api.jquery.com/ajaxComplete/

每当 Ajax 请求完成时,jQuery 都会触发 ajaxComplete 事件。此时会执行已使用 .ajaxComplete() 方法注册的所有处理程序。

也许两个处理程序都被解雇了。

于 2012-05-16T20:08:01.523 回答