0

誰かが次のことで私を助けてくれることを望んでいました。ユーザーがパスワードを入力するパスワード入力ボックスがあり、次のコードを使用してデータベースでパスワードを自動的にチェックします

 $('input[name=currentpassword]').keyup(function(){
                var currentcheck = $(this).val();
                var dataString='thisConfirm='+ currentcheck +'&userid='+$('input[name=userid]').val();
                PasswordChecking=   $.ajax({
                                        type:"POST",
                                        url:"/assets/inc/password-check.php",
                                        data:dataString,
                                        dataType:'html',
                                        context:document.body,
                                        global:false,
                                        async:false,
                                        success:function(data){
                                            return data}
                                            }).responseText;
                    checkconfirms(emailconfirm, passconfirm, PasswordChecking);
        });

しかし、私が気づいているのは、キーを押すたびに遅延があり、入力されたパスワードをチェックする方法または代替手段があることを望んでいました。

4

3 に答える 3

4

必要なのは、ユーザーがすばやく入力している場合にすべてのキーアップでパスワードをチェックしないように、ajax 要求をキャンセルするタイムアウトですが、ユーザーが入力を終了した場合にのみです。また、ブラウザのロックを回避するために、次のような非同期呼び出しを使用する必要があります。

$('input[name=currentpassword]').on('keyup', function() {
    var data = {thisConfirm : this.value, userid: $('input[name=userid]').val()};

    clearTimeout($(this).data('timer'));

    $(this).data('timer', setTimeout(function() {
        $.ajax({
            type: "POST",
            url: "/assets/inc/password-check.php",
            data: data,
            dataType: 'html',
            context: document.body,
            global: false,
        }).done(function() {
            checkconfirms(emailconfirm, passconfirm, PasswordChecking);
        })
    },400);
});​
于 2012-11-26T12:48:42.707 に答える
1

blurAdil が提案したように、またはイベントを使用するfocusoutことは 1 つのオプションです。setTimeout()別の方法として、キーストロークごとに AJAX 要求を送信しないように、パスワードのチェックを遅らせるために を使用することもできます。代わりに、その入力の入力が停止してから X 秒後に単一の AJAX 要求を送信します。

var checkPassword;
$('input[name=currentpassword]').keyup(function() {
    clearTimeout(checkPassword);
    checkPassword = setTimeout(function() {verifyPassword(this)}, 1000); // this would delay calling verifyPassword() by 1 second
});

function verifyPassword(element) {
    var currentcheck = element.value;
    // do your AJAX call here
});
于 2012-11-26T12:47:51.420 に答える
0

async:false,非同期呼び出しに当てはまるものを使用して います。keyup ではなく、jquery イベントfocusout()でパスワードを確認することをお勧めします。

$('input[name=currentpassword]').focusout(function(){
            var currentcheck = $(this).val();
            var dataString='thisConfirm='+ currentcheck +'&userid='+$('input[name=userid]').val();
            PasswordChecking=   $.ajax({
                                        type:"POST",
                                        url:"/assets/inc/password-check.php",
                                        data:dataString,
                                        dataType:'html',
                                        context:document.body,
                                        global:false,
                                       async:true,
                                       success:function(data){
                                        //return data
                                        alert("here you would decide on data for valiadation success");
                                        }
                               }).responseText;
                checkconfirms(emailconfirm, passconfirm, PasswordChecking);
    });
于 2012-11-26T12:41:08.210 に答える