使用jQuery更新行表(数据网格)时出现问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用jQuery更新行表(数据网格)时出现问题相关的知识,希望对你有一定的参考价值。

我正在尝试编辑表格中的一行(数据网格)。问题是:我没有更新点击的行,而是创建了一个新行。我想要的是更新我在模态窗口中单击的行,我无法实现...似乎我错过了我的函数中对应于模态窗口的那一行的表示按下“save-btn”吧?

这是文件:http://jsbin.com/iyubox/2/

html:
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery.min.js"></script>
<link href="http://twitter.github.io/bootstrap/assets/css/bootstrap.css" rel="stylesheet" type="text/css" />
<link href="http://twitter.github.io/bootstrap/assets/css/bootstrap-responsive.css" rel="stylesheet" type="text/css" />
<script src="http://twitter.github.io/bootstrap/assets/js/bootstrap.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
    <table id="main-table" class="table">
            <thead>
            <tr class="box_round">
                <td>Date</td>
                <td>Entry</td>
                <td>Invoice</td>
                <td>text</td>
            </tr>
            </thead>
            <tbody>
            <tr>
                <td><a class="inData" href="">17.17.17</a></td>
                <td><a class="inData" href="">50123</a></td>
                <td><a class="inData" href="">Invoice</a></td>
                <td><a class="inData" href="">Hola señor</a></td>

              <td><a class="deleteItem" href="#"><i class="icon-trash"></i></a></td>
              <td><a href="#secondModal" role="" class="edit" data-toggle="modal"><i class="icon-edit"></i></a></td>
            </tr>
<!--
*************************************************************************
<!--
*************************************************************************
-->
        <div id="secondModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" >
                <div class="modal-header">
                    <button style="position: relative; left: 27px; top: -23px; opacity: 1" type="button" class="close" data-dismiss="modal" aria-hidden="true"><img src="gfx/btn-close-popup.png" alt=""/></button>
                    <h3 id="myModalLabel">Day book</h3>
                </div>
                <div class="modal-body">

                    <div class="FormItems">
                        <ul>
                            <div class="box">
                            <ul>
                                <li class="innerBox innerFloat"><p>Type</p><input class="in-type input-small" type="text" >
                                </li>
                                <li class="innerBox innerFloat"><p>Entry</p><input class="in-entry input-small" type="text" >
                                </li>
                                <li class="innerBox"><p>Date</p>
                                    <input class="in-calender input-small datepicker" type="text" style="">
                                </li>
                            </ul>
                            </div>

                            <div class="box">
                                <ul>

                                    <li class="innerBox"><p>Text</p><input id=".text" class="in-text input-medium" type="text"/></li>

                                </ul>
                            </div>

                        </ul>
                    </div>

                </div>
                <div class="modal-footer">
                    <button class="btn real" data-dismiss="modal" aria-hidden="true">Close</button>
                    <button class="btn btn-primary">Save changes</button>
                </div>
       </div>

</body>
</html>

JQUERY

function deleteItem(){
    $(this).parent().parent().remove();
    console.log('working');
}

$('#main-table').on('click', '.deleteItem', deleteItem);



$('#main-table').on('click', '.edit', function(){
    var entry, calender, amount, text, currency, account_no, invoice, contra_account;
     var row = $(this).parents('tr');

         var getData_obj = {

            calender : $('#main-table .inData:eq(0)').text(),
            entry : $('#main-table .inData:eq(1)').text(),
             text : $('#main-table .inData:eq(3)').text(),
            amount : $('#main-table .inData:eq(4)').text(),
            account_no : $('#main-table .inData:eq(5)').text(),
            contra_account : $('#main-table .inData:eq(6)').text(),
            currency : $('#main-table .inData:eq(7)').text()
        }


    $('#secondModal .in-calender').val(getData_obj.calender);
    $('#secondModal .in-entry').val(getData_obj.entry);
    $('#secondModal .in-text').val(getData_obj.text);

    $('#secondModal .btn-primary').on('click', function(){

        var secondData_obj = {

            calender : $('#secondModal .in-calender').val(),
            entry : $('#secondModal .in-entry').val(),
            val :$('#secondModal .in-val').val(),
            text: $('#secondModal .in-text').val()
        }

        $('#main-table tbody').append(
                '<tr>' +
                        '<td><a class="inData" href="">'+secondData_obj.calender+'</a></td>'+
                        '<td><a class="inData" href="">'+secondData_obj.entry+'</a></td>' +
                        '<td><a class="inData" href="">'+secondData_obj.invoice+'</a>' +
                        '<td><a class="inData" href="">'+secondData_obj.text+'</a>' +

                        '<td><a class="deleteItem" href="#"><i class="icon-trash"></i></a></td>'+
                        '<td><a href="#secondModal" role="" class="" data-toggle="modal"><i class="icon-edit"></i></a></td>'+

                        '</tr>'
        );

    });




}

);
答案

您正在使用append,它只是在表格中添加了一个新的tr标签。您需要找到一种方法来选择您要编辑的确切tr标记,删除其内容然后附加新信息。

从你的代码中查看替换这个...

$('#main-table tbody').append(
            '<tr>' +
                    '<td><a class="inData" href="">'+secondData_obj.calender+'</a></td>'+
                    '<td><a class="inData" href="">'+secondData_obj.entry+'</a></td>' +
                    '<td><a class="inData" href="">'+secondData_obj.invoice+'</a>' +
                    '<td><a class="inData" href="">'+secondData_obj.text+'</a>' +

                    '<td><a class="deleteItem" href="#"><i class="icon-trash"></i></a></td>'+
                    '<td><a href="#secondModal" role="" class="" data-toggle="modal"><i class="icon-edit"></i></a></td>'+

                    '</tr>'
    );

有了这个...

  var tableBody = document.getElementById('main-table').getElementsByTagName('tbody');
  var tableRow = tableBody[0].getElementsByTagName('tr');


                  tableRow[0].innerHTML = '<td><a class="inData" href="">'+secondData_obj.calender+'</a></td>'+
                    '<td><a class="inData" href="">'+secondData_obj.entry+'</a></td>' +
                    '<td><a class="inData" href="">'+secondData_obj.invoice+'</a>' +
                    '<td><a class="inData" href="">'+secondData_obj.text+'</a>' +
                    '<td><a class="deleteItem" href="#"><i class="icon-trash"></i></a> </td>'+'<td><a href="#secondModal" role="" class="" data-toggle="modal"><i class="icon-edit"></i></a></td>';

您将编辑该行而不是添加新行,但这不是一个完美的解决方案。当您单击编辑图标以使其正常工作时,您仍需要一种方法来标识要编辑的行。

希望这可以帮助。

另一答案

好吧,我想出了一个不使用ID的解决方案:s,它不是最好的解决方案,对于下一个解决方案,我将使用JSON与我认为的整个对象。

如果你需要帮助你正在做的类似的事情,请看看这个文件:qazxsw poi

OBS:它不是相同的HTML(节省了一些时间),但想法是一样的。

以上是关于使用jQuery更新行表(数据网格)时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

第一次打开 jquery 对话框时出现奇怪的问题(在 asp.net gridview 中)

使用 scipy interpolate griddata 方法重新网格化数据时出现意外的内存错误

Adobe Flex:尝试验证数据网格输入时出现错误#1034

在 ASP.NET MVC 中将 10000 个数据上传到 Devextreme 数据网格时出现问题

尝试使用 jQuery 获取 JSON 数据时出现 TypeError

Kendo网格在网格中触发多个控件的数据源事件。(MVVM绑定)