弹出循环:添加数据时停止重复/三次应用/X


Pop-up Loop: Stop Duplication/Triplication/X When Adding Data

在弹出表单中添加数据时,有人能帮助我跟踪导致重复/三倍化/x的代码行吗?除了添加之外,新增/更新/删除功能都可以。

这种情况是,当我添加数据时,它应该保存一次(以前很好),但现在保存两次或三次(例如,我们现在有两个相同的数据副本)。。当我添加另一个数据时,它现在保存了之前保存的数据数量的x2或x3(所以我们现在又有4个相同的数据副本)。。见鬼!它假设只保存2个唯一的数据对吗?但我们现在有2+4个相同的数据副本。请帮忙。。

这是html文件:

<div id="man_contact_person">
<form id="form_client_contact" action="" method="post">
    <span id="client_d_result"></span>
    <table class="children_table">
        <th>
            <tr style="font-weight:bold">
                <td style="width: 10px"></td>
                <td>Person</td>
                <td>Position</td>
                <td>Contact No</td>
                <td>Archive?</td>
                <td></td>
            </tr>
            <tr>
                <td><input type="hidden" id="client_d_id" name="client_d_id" /><input type="hidden" id="client_h_id" name="client_h_id" /></td>
                <td><input type="text" class="form-control input-sm" id="person" name="person" placeholder="Full Name" style="width:200px;"></td>
                <td><input type="text" class="form-control input-sm" id="position" name="position" placeholder="Position" style="width:200px;"></td>
                <td><input type="text" class="form-control input-sm" id="contact_no" name="contact_no" placeholder="mobile/landline/wireless" style="width:200px;"></td>
                <td align="center"><?php input_checkbox('is_archive', ''); ?></td>
                <td align="center">
                    <input type="button" class="small_save" id="btn_add_client_d" name="btn_add_client_d" />
                    <input type="button" class="small_save" id="btn_save_client_d" name="btn_save_client_d" />
                    <input type="button" class="small_new" id="btn_new_client_d" name="btn_new_client_d" />
                </td>
            </tr>
        </th>
        <tbody id="client_children">
    </table>
</form>

这是js文件:

//some codes...
$(document).ready(function(){
    //some codes...
    $("#man_contact_person").dialog({ //the popup form
        autoOpen: false,
        width: 810,
        height: 500,
        modal: true,
        title: "Manage Contact Persons"
    });
    $("#btn_contact_person").click(function(){ //when calling popup form
         if ($("#message").is(":visible")){
            $("#man_contact_person").dialog( "open" );
            get_client_children($("#id").val());
        } else{
            if ($("#cname").val() != '' || $("#fname").val() != ''){
                $("#man_contact_person").dialog( "open" );
                get_client_children($("#id").val());
            } else{
                alert("Please save the client's data first.");
            }
        }
    });
    //some codes...
});
//some codes...
function reset_client_d(){ //resetting the fields
    $("#client_d_id").val('');
    $("#form_client_contact #person").val('');
    $("#form_client_contact #position").val('');
    $("#form_client_contact #contact_no").val('');
    $('#form_client_contact #is_is_archive').prop('checked', false);
    $("#btn_add_client_d").show();
    $("#btn_save_client_d").hide();
}
function client_d_add(client_h_id){ //adding data
    var params = 'client_h_id=' + client_h_id +
        '&person=' + $('#form_client_contact #person').val() +
        '&position=' + $('#form_client_contact #position').val() +
        '&contact_no=' + $('#form_client_contact #contact_no').val() + 
        '&is_archive=' + $('#form_client_contact #is_archive').val() + '';
    $.ajax({
        type: 'POST',
        url: 'client_d_add.php',
        data: params,
        success: function(data){
            get_client_children(client_h_id);
            $("#client_d_result").show();
            reset_client_d();
        }
    });
}
function get_client_children(client_h_id){ //display for popup form
    var params = 'client_h_id=' + client_h_id;
    $("#form_client_contact #is_is_archive").click(function(){
        $("#form_client_contact #is_archive").val(($("#form_client_contact #is_is_archive").prop("checked") ? "Y" : "N"));
    });
    $.ajax({
        type: 'POST',
        url: 'get_client_children.php',
        data: params,
        success: function(data){
            $('#client_children').html(data);
            $('#btn_save_client_d').hide();
            $('#btn_save_client_d').click(function(){client_d_update(client_h_id);});
            $('#btn_add_client_d').click(function(){client_d_add(client_h_id);});
            $('#btn_new_client_d').click(function(){reset_client_d();});
            $('.edit_client_d').click(function(){
                return client_d_select(this.id);
            });
        }
    });
}
//some codes...

好的,找到了:您正在多次分配点击处理程序:

$('#btn_save_client_d').click(function(){client_d_update(client_h_id);});

每次调用get_client_children时,都会添加一个新的单击处理程序,因此当单击保存按钮时,会多次调用保存函数。

通常,您应该在页面初始化时分配一次事件处理程序。

与其将id作为参数传递给save函数,不如将其写入表单中的一个隐藏字段,并与其他数据一起发布到。

我将重复一遍:使用JavaScript和AJAX进行缩减。你的代码似乎太过了。