javascript - 非常奇特 - 第一次提交一次,第二次提交两次,第三次提交三次..等等..我做错了什么?

标签 javascript php jquery ajax forms

使用通过 ajax post 提交编辑信息的模态表单。问题是,它第一次提交了一次..再次启动模态表单,然后提交,然后提交两次,依此类推。以前有人有过这样的经历吗?请帮忙。

$("#editInfo").click(function () {
    valform = ["realname","email"];
    valneed = 2;
    $('#smallModal .modal-body').empty();
    $('#smallModal .modal-body').load('/profile.php?action=profile_edit_info');
    $('#smallModal .modal-title').text('Edit Personal Information');
    $('#smallModal').modal('show')

    $('#smallModal').on('shown.bs.modal', function () {
        $("#smallModal #profileeditinfoform").keydown(function(event){
        if(event.keyCode == 13 && event.target.nodeName!='TEXTAREA')
            {
                event.preventDefault();
                return false;
            }
        });

        $("#realname_comment").hide();
        $("#email_comment").hide();

        $('#realname').bind("change", function() {
            $('#realname').addClass("spinner");
            var v_realname = verifyVar($('#realname').val(),'name');
            displayVerify(v_realname,'realname');
        });

        $('#email').bind("change", function() {
            $('#email').addClass("spinner");
            var v_email = verifyVar($('#email').val(),'email');
            displayVerify(v_email,'email');
        });

        $("#editinfo_submit_btn").click(function(event) {
            event.preventDefault();
            $('#loader').fadeIn();

            formData = $("#profileeditinfoform").serialize();
            var v_submit = submitEditInfo(formData);
            verifySubmitEditInfo(v_submit);

            $('#loader').fadeOut();
        });
    });
});

function submitEditInfo(data) {
    var alldata = data + '&action=profileeditinfo';
    return $.ajax({
        type: 'POST',
        cache: false,
        data: alldata,
        url: '/ajax/submit.php'
    });
}

function verifySubmitEditInfo(ajaxCall) {
        ajaxCall.success(function(realData) {
                response = JSON.parse(realData)
                if (!response.success) {
                    $.gritter.add({
                        title: response.title,
                        image: '/img/custom/fail.png',
                        sticky: false,
                        text: response.message
                    });
                } else {
                    valform = [];
                    $("#submitdiv").hide();
                    $("#profileeditinfoform").find("input:text").val('');
                    $('#infodiv').slideUp(200).load('/divloader.php?req=profile_info').slideDown(200);
                    $.gritter.add({
                        title: response.title,
                        image: '/img/custom/success.png',
                        sticky: false,
                        text: response.message
                    });
                    $("#smallModal").modal('hide');
                }
        });
}

最佳答案

每次单击时,您都会添加一个新的事件处理程序:

$('#smallModal').on('shown.bs.modal' //...

您确定要在“点击”时执行此操作吗?或者最好在点击处理程序之外进行设置?

事实上,您正在绑定(bind)事件处理程序作为对这段代码中其他事件的响应。这可能不是一个好主意,除非您在完成后解除它们的绑定(bind)。

关于javascript - 非常奇特 - 第一次提交一次,第二次提交两次,第三次提交三次..等等..我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33131714/

相关文章:

javascript - HTML5、CSS3、PHP 联系表不发送信息 + 添加必填字段

php - 如何使用 PHP SDK 使用 PayPal Express Checkout

php - SQLSTATE[HY000] : General error: 1364 Field 'uID' doesn't have a default value

javascript - 尝试附加特定图像类型的图像计数 | jQuery

jquery - <svg> 掩码在用于在 react.js 中显示 svg <image> 时不起作用

javascript - 当页面在 Angular 刷新时转到上一个状态时,如何使用 $stateProvider 处理页面刷新?

javascript - 如何在 JavaScript 函数中将参数设置为对象

javascript - 如何将外部 javascript 文件注入(inject)到 div 中

javascript - 将给定的分钟值从 api 转换为正确的小时格式并显示在 UI 上并以 api 分钟格式发布相同的小时数

javascript - 使用jquery数据表我无法在不破坏FixedHead的情况下使单元格colspan = 3