-1

これが私の問題です。フォームの送信を許可する前に、フォームを検証し、ユーザー名が使用可能であることを確認しようとしています。ユーザー名をチェックするPHPスクリプトを含め、すべての関数が正しく機能します。ただし、送信時にフォームの送信を停止することはできません。私が得るのは、私が定義したAJAX .error(message)です。Firebugレポート

throw Components.Exception("prompt aborted by user", Cr.NS_ERROR_NOT_AVAILABLE);

ただし、e.preventDefault();を呼び出すと username_exists関数の外部では、フォームの送信が停止され、前述の関数の内部でチェックを実行できるようになります。私は完全に困惑しています、そしてあなたが助けてくれることを願っています。ありがとう。

PS。その関数内で単純なalert()を実行することさえできません

$(function(){
    check_username_onsubmit();
});


function check_username_onsubmit(){
    $this = $('#username.registerForm');
    $('form.registerForm').submit(function(e){
        username_exists($this, function(data){
            if(data.found == 1){
                e.preventDefault();
                alert('Username Taken');
            }else{
                alert('Username Free');
            }
        });
        // e.preventDefault();
    });
}


function username_exists($this, callback){
    var username = $this.val();

    $.ajax({
        url : '../includes/Single Scripts/username_exist.php',
        data : {
            username : username 
        },
        type : 'POST',
        dataType : 'json',
        success : function(data){
            callback(data);
        }
    }).error(function(){
            alert('An error has occured');
    });
}
4

3 に答える 3

2

を削除して、 after<input type="submit">を追加します。<button id="send"></form>

次に、次のようにします。

$('#send').on('click', function () {
    var uname = $('#username.registerForm').val();
    username_exists(uname, function (data) {
        if (data.found == 1) {
            alert('Username Taken');
        } else {
            alert('Username Free');
            $('form.registerForm').submit();
        }
    });
});

編集:また:

function username_exists(username, callback) {
    $.ajax({
        url: '../includes/Single%20Scripts/username_exist.php',
        data: {
            'username': username
        },
        type: 'POST',
        dataType: 'json',
        success: function (data) {
            callback(data);
        }
    }).error(function () {
        alert('An error has occured');
    });
}
于 2012-05-07T19:16:25.623 に答える
2

送信すると、まさにその設計により、ページが離れます。AJAX は、その設計上、ページを離れません。

フォームをサーバーに送信する前に JavaScript を使用してフォームを検証する場合は、送信ボタンを削除してください。クリック時にクライアント側の検証スクリプトを起動し、成功した場合は AJAX 呼び出しを実行します。

$('#someForm').on('click','#myButton', {}, aValidationFunctionToCall);

aValidationFunctionToCall : function (event) {
    // validate stuff
    // show the user the error of their ways
    // or call your ajax
}
于 2012-05-07T19:34:30.273 に答える
0

check_username_onsubmit()、 をスローするreturn false;と、フォームの送信が停止します。

すでにそれを知っている場合は、javascript メソッドを送信イベントまたは送信クリック イベントに適切にアタッチしたことを確認するためのチェックを開始します。関数はおそらく呼び出されていません。

于 2012-05-07T19:11:10.907 に答える