首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript中的重用函数调用[数据将复制孪生]

Javascript中的重用函数调用[数据将复制孪生]
EN

Stack Overflow用户
提问于 2020-12-29 05:58:51
回答 2查看 56关注 0票数 1

代码语言:javascript
复制
    <ul class="nav nav-pills mytab">
       <li class="nav-item">
          <a class="nav-link active" bankid="1" href="#test1" data-toggle="tab"><i class="fa fa-university"></i> test1</a>
      </li>
                                                                                                                    <li class="nav-item">
         <a class="nav-link" bankid="2" href="#test2" data-toggle="tab"><i class="fa fa-university"></i> test2</a>
    </li>
    </ul>

<table id="table_{{$bvl['id']}}" class="table table-bordered table-striped" cellpadding="0px" width="auto" cellspacing="0px">
                                        <thead id="headD">
                                            <tr></tr>
                                            <tr></tr>
                                        </thead>
                                        <tbody id="dataD" runat="server"></tbody>
                                        <tfoot>
                                            <tr></tr>
                                        </tfoot>
                                    </table>

Javascript

代码语言:javascript
复制
 $('.mytab a').on('click', function (e) {
                var bankid = $(this).attr("bankid");
                getTableMeta(bankid);
            })

//get column data
function getTableMeta(bankid) {
    table          = "";
    ColumnData     = "";
    EditRowData    = [];
    mdataArray     = [];
    isEditAllState = false;
    defaultcol     = "";

    $('#table_'+bankid+' thead tr:first-child th').remove();
    $('#table_'+bankid+' thead tr:nth-child(2) th').remove();
    $('#table_'+bankid+' thead tr:first-child td').remove();
    $('#table_'+bankid+' thead tr:nth-child(2) td').remove();

    $.ajax({
        type: 'POST',
        url: "{{route('getcolumn')}}",
        data: {
            "_token": "{{ csrf_token() }}",
        },
        dataType: 'json',
        success: function (data) {

            ColumnData   = data.Column;
            var inputype = "";
            $.each(data.Column, function (index, element) {
                //title
                $('#table_'+bankid+' thead tr:first-child').append($('<th>', {
                    text: element.Name
                }));

                //insert
                if (data.Insertable == true) {
                    if (element.Editable == true) {
          
                        if(element.Name == 'in' || element.Name == 'out'){
                            inputype = 'number';
                        }else if(element.Name == 'time'){
                            inputype = 'time';
                        }else{
                            inputype = 'text';
                        }

                        $('#table_'+bankid+' thead tr:nth-child(2)').append($('<th class="'+element.Name+'"><input class="'+element.Name+'Add_'+bankid+'" style="width: 99% " type="'+inputype+'" /></th>'));
                    }else{
                        $('#table_'+bankid+' thead tr:nth-child(2)').append($('<th></th>'));
                    }
                }

                mdataArray.push({ mData: element.Name, class: element.Name });
            });

            if (data.Deletable == true) {
                $('#table_'+bankid+' thead tr:first-child').append($('<th>', {
                    text: 'Action'
                }));
                mdataArray.push({ defaultContent: '<span class="deleteBtn"><i class="fa fa-trash-o fa-lg" aria-hidden="true"></i></span>', class: 'DeleteRow' });

            }
            if (data.Insertable == true) {
                $('#table_'+bankid+' thead tr:nth-child(2)').append($('<td><span class="insertBtn"><i class="fa fa-plus fa-lg" aria-hidden="true"></i></span></td>'
                ));
            }
            defaultcol = data.Column[0].Name;
            //once table headers and table data property set, initialize DT
            initializeDataTable(bankid);

        }
    });
}

//get row data
function initializeDataTable(bankid) {

    table = $('#table_'+bankid).DataTable({
        "ajax": {
            url: "{{route('getcolumndata')}}",
            "type": "POST",
             data: function (data) { 

                editIndexTable = -1;
                var colname;
                var sort = data.order[0].column;
                if (!data['columns'][sort]['data'] == '')
                    colname = data['columns'][sort]['data'] + ' ' + data.order[0].dir;
                //in case no sorted col is there, sort by first col
                else colname = defaultcol + " asc";
                var colarr = [];
                var colfilter, col;
                var arr = {
                    'draw': data.draw, 
                    'length': data.length,
                    'sort': colname, 
                    'start': data.start, 
                    'search': data.search.value,
                    'bankid': bankid,
                    '_token': "{{ csrf_token() }}"
                };
                //add each column as formdata key/value for filtering
                data['columns'].forEach(function (items, index) {
                    col = data['columns'][index]['data'];
                    colfilter = data['columns'][index]['search']['value'];
                    arr[col] = colfilter;
                });
                
                return arr;
            }
           
        },
        "bSortCellsTop": true,
        "orderable": false,
        "destroy": true,
        "lengthMenu": [10, 50, 100],
        "iDisplayLength": 100,
        "searching": true,
        serverSide: true, 
        "processing": true,
        "columnDefs": [{ 'targets': 1, 'visible': false }],
        aoColumns: mdataArray
    });

    //for insert button
    $("#table_"+bankid+" thead").on('click', 'tr td span.insertBtn', function (e) {
        console.log("a"); //here will console duplicate data depend on the tab user click
        insertRowData(this.parentNode.parentNode, bankid);
    });

}

问题:我已经使用引导导航选项卡创建了一个选项卡。对于每个选项卡,它将有bankID,这取决于用户的单击,并将传递bankID并呈现datatable。上面的代码工作得很好,但是它将面临一个重复的问题。这是否意味着,如果用户随机播放并单击选项卡1(test1)选项卡2(test2),当他们试图插入数据时,就会出现重复输入问题。我尝试在console.logonClick函数中,它将有多个控制台。这将取决于用户单击该选项卡的时间。例如,当第一次单击选项卡2(test2),然后单击选项卡1(test1),然后再次单击选项卡2(test2)时,它将有2个重复的enter。有人能帮忙吗?我在这个问题上花了很长时间:

EN

回答 2

Stack Overflow用户

发布于 2020-12-29 06:22:22

请在单击函数之前使用此代码。

代码语言:javascript
复制
$('.mytab a').off('click');

单击“添加行”

代码语言:javascript
复制
$("#table_"+bankid+" thead tr td span.insertBtn").off('click');

$("#table_"+bankid+" thead").on('click', 'tr td span.insertBtn', function (e) {
    console.log("a"); //here will console duplicate data depend on the tab user click
    insertRowData(this.parentNode.parentNode, bankid);
});
票数 1
EN

Stack Overflow用户

发布于 2020-12-29 06:22:11

我认为这是因为您只需删除“头行”,就必须删除tbody行或为每个选项卡创建另一个表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65487920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档