无法弄清楚为什么这个ajax请求会触发两次

时间:2014-04-28 14:31:25

标签: javascript jquery html ajax

我正在研究这段代码,但是当我点击所选按钮时,我无法弄清楚为什么ajax请求会启动两次:

   $('#passwd-nuova').blur(function() {
        var response = $('#passwd-nuova').validate({
            'classeform': 'form-utenti',
            'empty': 'passwd-nuova'
        });
        if (!response.empty) {
            $('#reset').addClass('btn-disabled');
        } else {
            $('#reset').removeClass('btn-disabled');
            /*
             * RESET PASSWORD PANNELLO
             */
            $('#reset').on('click', function() {
                    var new_passwd = $('input[name=passwd-nuova]').val();
                    var selezionato = $(this).loadID({
                        'nometabella': 'utenti',
                        'abbr': 'utenti'
                    });
                    var send_email = $('#cb-email').prop('checked');
                    $.ajax({
                        cache: false,
                        type: "POST",
                        url: "/gutenti/",
                        dataType: "json",
                        data: {
                            'mod-passwd': true,
                            'idu': selezionato,
                            'new-passwd': new_passwd,
                            'send-email': send_email
                        },
                        success: function(response) {
                            var tab = $("#datatable_utenti").dataTable();
                            $('#modal-reset').modal('hide');
                            tab.fnDraw();
                            $(window).scrollTop(0);
                            $(document).genAlert({
                                tipo: 'success',
                                msg: 'modifica completata con successo',
                                time: 800
                            });
                            $('input').each(function() {
                                $(this).val('');
                            });
                            $("#datatable_utenti tbody").compileForm({
                                'abbr': 'utenti',
                                'nometabellaDB': 'admin_utenti',
                                'nometabella': 'utenti'
                            });
                            $(document).stato(profile, 'base');
                            return;
                        },
                        error: function() {
                            console.log("errore async");
                            $('#modal-reset').modal('hide');
                            $(window).scrollTop(0);

                            $(document).genAlert({
                                tipo: 'error',
                                msg: 'qualcosa è andato storto, riprova',
                                time: 800
                            });
                        }
                    });
                    return;

            });
        }

    });

我试图在调用后禁用该按钮,并且还没有返回任何内容退出该函数,但没有任何效果。

4 个答案:

答案 0 :(得分:1)

我在模糊函数中调用了函数。然而;单击#reset按钮时,也会调用该函数。我希望它有效。

$('#passwd-nuova').blur(function() {
        var response = $('#passwd-nuova').validate({
            'classeform': 'form-utenti',
            'empty': 'passwd-nuova'
        });
        if (!response.empty) {
            $('#reset').addClass('btn-disabled');
        } else {
            $('#reset').removeClass('btn-disabled');
            /*
             * RESET PASSWORD PANNELLO
             */
            $('#reset').click();
        }

    });


     $('#reset').on('click', function() {
        var new_passwd = $('input[name=passwd-nuova]').val();
        var selezionato = $(this).loadID({
            'nometabella': 'utenti',
            'abbr': 'utenti'
        });
        var send_email = $('#cb-email').prop('checked');
        $.ajax({
            cache: false,
            type: "POST",
            url: "/gutenti/",
            dataType: "json",
            data: {
                'mod-passwd': true,
                'idu': selezionato,
                'new-passwd': new_passwd,
                'send-email': send_email
            },
            success: function(response) {
                var tab = $("#datatable_utenti").dataTable();
                $('#modal-reset').modal('hide');
                tab.fnDraw();
                $(window).scrollTop(0);
                $(document).genAlert({
                    tipo: 'success',
                    msg: 'modifica completata con successo',
                    time: 800
                });
                $('input').each(function() {
                    $(this).val('');
                });
                $("#datatable_utenti tbody").compileForm({
                    'abbr': 'utenti',
                    'nometabellaDB': 'admin_utenti',
                    'nometabella': 'utenti'
                });
                $(document).stato(profile, 'base');
                return;
            },
            error: function() {
                console.log("errore async");
                $('#modal-reset').modal('hide');
                $(window).scrollTop(0);

                $(document).genAlert({
                    tipo: 'error',
                    msg: 'qualcosa è andato storto, riprova',
                    time: 800
                });
            }
        });
        return;

    });

答案 1 :(得分:1)

我猜这一行:

$('#reset').on('click', function() {
........

运行多次(每次模糊)。

您可以多次绑定事件,没有任何问题。

检查这是否解决了您的问题:

$('#reset').off('click').on('click',function(){ .....

如果是,请尝试移动"事件附件"去另一个地方。

Jquery - 'on' and 'off'

答案 2 :(得分:1)

尝试取消绑定/绑定点击回调:

var callback = function () { ... }
$('#reset').unbind('click', callback);
$('#reset').bind('click', callback);

如果您将点击事件附加两次,则会被调用两次。

答案 3 :(得分:1)

您的$('#passwd-nuova').blur处理程序多次绑定$('#reset').click'处理程序。

我很高兴我的评论帮助你了;)