0

概要: これは基本的なスタンドアロンの Web フォームです。関数用に JQuery が含まれている、単なる html 形式です。

電子メールとユーザー名を (電子メールの) 一意性と有効性についてチェックするフォームがあります。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 に答える