1

我将 Jquery DataTables 1.7.6 与 JQuery 1.8.6 一起使用。我正在尝试设置一个在一行中有一个按钮的数据表,然后捕获对该按钮的单击以将该行移动到另一个表。我在获取 DataTable 中的数据以调用添加和删除函数时遇到问题。

<script type="text/javascript">
    $(document).ready(function () {
        var eligibleCreatives = $('#EligibleCreativeTableId').dataTable({
            "bJQueryUI": true,
            "bStateSave": true,
            "bAutoWidth": false,
            "aoColumnDefs": [
                { "bSortable": false, "aTargets": [0] },
                { "bVisible": false, "aTargets": [3] },
            ],
            "aaSorting": [[1, "asc"]]
        });
        associatedCreatives = $('#AssociatedCreativeTableId').dataTable({
            "bJQueryUI": true,
            "bStateSave": true,
            "bAutoWidth": false,
            "aoColumnDefs": [
                { "bSortable": false, "aTargets": [0] },
                { "bVisible": false, "aTargets": [3] },
            ],
            "aaSorting": [[1, "asc"]]
        });

        eligibleCreatives.$('tr').click(function () {
            var data = .fnGetData( this );
            // this tells me that eligibleCreatives has no method $

        });


        $('#disassociate-creative').click(function () {
        //I can't get at the actual row node here.
        var data = associatedCreatives.fnGetData($(this).closest('tr')[0]);
        eligibleCreatives.fnAddData(data);
        associatedCreatives.fnDeleteRow(this); 
        return false;
        });
        $('#associate-creative').click(function () {
        var data = associatedCreatives.fnGetData($(this).closest('tr')[0]);
        associatedCreatives.fnAddData(data);
        eligibleCreatives.fnDeleteRow(this);
        return false;
        });

    });
    function fnClickAssociate() {
        $('#AssociatedCreativeTableId').dataTable().fnDeleteRow();
        $('#AssociatedCreativeTableId').dataTable().fnAddData([]);
    }
</script>
4

1 回答 1

1

我认为问题在于 fnGetData 返回特定行内容的数据对象,而不是节点本身。但是fnAddDatafnDeleteRow每个都需要 TR 节点,而不是数据对象。解决这个问题的两种方法:

选项 1:如果您确定要$(this).closest('tr')[0]返回所需行的整个 TR 元素,则将每个click函数的第一行更改为:

var data = $(this).closest('tr')[0];

这应该为接下来的两行中的函数提供适当的 TR 节点来执行操作。

选项 2:如果您不确定$(this).closest('tr')[0]返回整个 TR 元素(您可以通过console.log()-ing 来检查是否返回了适当的内容),那么我会考虑fnGetPosition在按钮所在的 TD 元素上使用 Datatable.net in. 我发现它更加灵活,它总是会返回一个可以与fnAddDataand一起使用的元素fnDeleteRow

祝你好运!

于 2012-03-16T11:35:15.177 回答