0

各文字を入力した後にパスワードをチェックする入力があります。これにより、各キーのPOSTチェックが追加されます。

パスワードチェックが確認されると、送信ボタンが有効になり、このボタンをクリックすると、ajaxを介して詳細がphpに送信されます。しかし、実際にはキーアップチェックと同じ回数だけ発火します。一度だけ発砲するように制限する方法はありますか?パスワードに6文字が含まれている場合、6回のキーアップチェックが実行され、6回のクリック更新が発生します。

キーアップパスワードチェック

$('input[name=currentpassword]').keyup(function(){
    var currentcheck = $(this).val();
    var dataString='thisConfirm='+ currentcheck +'&userid='+$('input[name=userid]').val();
    setTimeout(function(){
        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
                                    var PasswordChecking="1";
                                    console.log(PasswordChecking);
                                    console.log("here you would decide on data for valiadation success");
                                    checkconfirms(emailconfirm, passconfirm, PasswordChecking);

                                }
                            }).responseText;
    }, 1000);

});

checkconfirms関数内にあるjQuery更新ボタン

$('input[name=updatedetails]').click(function(){
                    var newEmailValue = $('input[name=newemailconfirm]').val();
                    var accountID   =   $('input[name=userid]').val();              
                    var dataString='email='+ newEmailValue +'&userid='+accountID;
                    $.ajax({
                            type:"POST",
                            url:"/assets/inc/user-change-email.php",
                            data:dataString,
                            dataType:'html',
                            context:document.body,
                            global:false,
                            async:false,
                            success:function(data){
                                var overlay = $("<div/>").addClass("overlay");
                                var logindialog = $("<div/>").addClass("popup-login");
                                $("body").append(overlay);
                                $("body").append(logindialog);
                                $(".popup-login").prepend('<p><label for="email">Email</label><input type="text" name="reloginemail" id="email"></p><p><label for="password">Password</label><input type="password" name="reloginpass" id="password"></p><input type="button" name="relogindude" value="sign in">');
                                $(".overlay").fadeIn();
                                $(".popup-login").fadeIn();
                                // Once the pop up is created this enable the click function which will enable the ajax form check.
                                $('input[name=relogindude]').click(function(){
                                    var email = $('input[name=reloginemail]').val();
                                    var password = $('input[name=reloginpass]').val();              
                                    var dataStringed='newemail='+ email +'&newpassword='+password;
                                    $.ajax({
                                        type:"POST",
                                        url:"/assets/inc/login.php",
                                        data:dataStringed,
                                        success:function(data){
                                            window.location.reload();
                                        }
                                    });
                                });//End relogindude click function
                            }
                    });//End updatedetails click function
4

2 に答える 2

2

これを試して、リクエスト数を制限するためのタイムアウトをクリアしてください。

var timeout;
$('input[name=currentpassword]').keyup(function(){
    var currentcheck = $(this).val();
    var dataString='thisConfirm='+ currentcheck +'&userid='+$('input[name=userid]').val();
    if(typeof timeout != 'undefined') clearTimeout(timeout);
    timeout = setTimeout(function(){
        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
                                    var PasswordChecking="1";
                                    console.log(PasswordChecking);
                                    console.log("here you would decide on data for valiadation success");
                                    checkconfirms(emailconfirm, passconfirm, PasswordChecking);

                                }
                            }).responseText;
    }, 1000);
于 2012-11-26T16:54:16.897 に答える
0

実行しようとしていることが良いかどうかは別として、タイムアウトの発生を停止したい場合(別のキーが押されたとき)、によって返されるtimeoutIDを保存する必要がありますsetTimeoutclearTimeoutその後、電話でキャンセルすることができます。

したがって、このフラグメントのようなもの:

var timerID = 0;

$('input[name=currentpassword]').keyup(function(){
    //...
    if (timerID) {
        clearTimeout(timerID);
        timerID = 0;
    }
    //...
    timerID = setTimeout(function() {
    //...

これで、タイムアウトの前に別のキーアップが発生した場合、前のキーアップに対してタイムアウトは呼び出されません。

于 2012-11-26T16:53:54.617 に答える