0

我有一个登录页面,即使用户多次单击它,我也想提交凭据,这就是我要使用的原因,.one()但是 .one() 有一个问题,假设用户有一些凭据问题,然后下次他修复它并尝试再次发送然后 .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。在您的常规点击处理程序中,您检查它是否为真,如果是,请将其设置为假并执行 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()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 回答