0

私はログインページを持っていて、ユーザーがそれを複数回クリックしても資格情報を送信したいのですが、それが私が使用したい理由です.one()が、.one() には、ユーザーに資格情報の問題があると思われる 1 つの問題があり、次回はそれを修正して試してみてくださいもう一度送信すると、.one() は機能しません。次に、いくつかのステップを実行する必要があります。これを修正するには?

$(document).ready(function(){
$("#submit").one("click", function() {
    data = some data
    if data !==""{
        $.ajax({
            url: '/my url/',
            type: 'POST',                   
            contentType: 'application/json',
            dataType: 'json',
            data :data,
            processData: false,
            success: function(data){
                alert("done")   
            },
            error: function(jqXHR, textStatus, errorThrown){
                alert("Some Error")      
                //here i want to do something so that if user click the submit button it will fire once                       
            }
        })
    }
    else
        //data is not there
        //here i want to do something so that if user click the submit button it will fire once 

    });
4

3 に答える 3

3

ハンドラーを再度バインドできます。

$("#submit").one("click", function handler() { // give the function a name
    // keep a reference to the clicked element so that you can access it
    // inside callbacks
    var self = this; 


    // ...

    // when something went wrong, bind the handler again
    $(self).one('click', handler);
});
于 2013-08-04T14:08:21.313 に答える
2

これに使いたいのですone()が、プレーンなajaxです。今のやり方の代わりに、'allowAjaxCheckLogin` のような変数を作成し、それを true に設定します。通常のクリック ハンドラーでは、true かどうかを確認し、true の場合は false に設定し、ajax 部分を実行します。ajax が完了し、ユーザーが再度実行できるようにする必要がある場合は、true に戻します。


var allowAjaxCheckLogin = true; // set to true, normal/startsituation allows a click

$('#submit').on('click', function(){
    // User may trigger actions:
    if( allowAjaxCheckLogin === true){
        allowAjaxCheckLogin = false; // Instantly set to false, if the user clicks again, nothing will happen

        $.ajax({ /* ajax settings here */ })
        .complete(function(){
            // this always fires, here you can check if you need to refresh the page to anochter location

           allowAjaxCheckLogin = true; // set back so the user may trigger again
        });
    }
});
于 2013-08-04T14:06:56.247 に答える
1

このようにon()andを使用できますoff()

var inProgress = false;
$("#submit").on("click", function() {
    data = some data
    if(data !== "" && !inProgress ){
        inProgress = true;
        $.ajax({
            url: '/my url/',
            type: 'POST',                   
            contentType: 'application/json',
            dataType: 'json',
            data :data,
            processData: false,
            success: function(data){
                $('#submit').off();  // If is correct remove all event listeners 
            },
            error: function(jqXHR, textStatus, errorThrown){
                loginFailed();                  
            }
        })
    }
    });

var loginFailed = function(){
   inProgress = false;
   alert("Some Error");
   // Display any Errors 
};

オフ: http://api.jquery.com/off

オン: http://api.jquery.com/on

進行中のログインがあるかどうかを確認する変数を作成します。進行中のログインがない場合は、再度ログインを試行できます。ログインが成功した場合は、クリックしても何も起こりません。イベント リスナーは削除されます。

于 2013-08-04T14:15:04.453 に答える