DataTables和jQuery对话框的问题

时间:2012-04-01 02:16:26

标签: javascript jquery jquery-ui datatables

我无法在一个简单的jquery对话框中使用数据表(http://datatables.net/)。当我单击按钮打开该框时,您可以看到数据表大约一秒钟,然后立即关闭。任何想法都会非常感激。

我启动对话框的功能如下所示。在其中,数据表被初始化。

function launchLocDialog(mydiv) {
    alert(mydiv);
    var oTable;
    var giRedraw = false;

    $(document).ready(function() {
        $("#table_id tbody").click(function(event) {
            $(oTable.fnSettings().aoData).each(function (){
                $(this.nTr).removeClass('row_selected');
            });

            $(event.target.parentNode).addClass('row_selected');
        });

        oTable = $('#table_id').dataTable( {
            "aaData": [ /* Reduced data set */
                [ "1", "02/22/12"],
                [ "2", "02/22/12"],
                [ "3", "02/22/12"],
                [ "4", "02/22/12"],
                [ "5", "02/22/12"],
                [ "6", "02/22/12"], 
                [ "7", "02/22/12"],
                [ "8", "02/22/12"],
                [ "9", "02/22/12"],
                [ "10", "02/22/12"],
                [ "11", "02/22/12"],
                [ "12", "02/22/12"],
            ],
            "aoColumns": [
                { "sTitle": "Number" },
                { "sTitle": "Date Start" }
            ]
        });  

        oTable.$('td').click( function () {
            //var anSelected = fnGetSelected(oTable);
            var sData = oTable.fnGetData(0,0);
            //alert( 'The cell clicked on had the value of '+sData );
            alert(sData);

            //$.post('intsum.php', {intsumID: sData});

            // window.location = "intsum.php";
        });

    });

    $( "#dialog:ui-dialog" ).dialog( "destroy" );

    $( "#dialog" ).dialog({
        modal: true,
        buttons: {
            Ok: function() {
                $( this ).dialog( "close" );
            }
        }
    });
}

1 个答案:

答案 0 :(得分:1)

只是考虑为此设置一些测试,但是在我的头脑中......你在命名函数中有一个文档就绪函数。我无法测试其中的全部含义,但通常不是完成的事情。

使用document ready来触发需要等待DOM可编写脚本的函数正是设置oTable所需要的;但是,我认为将它嵌套在一个被调用的命名函数中(在某些时候......代码的那部分代码在样本中是不可见的)似乎会产生意想不到的后果。

<强>更新

代码中有一些怪癖,我试图理顺一些(这里和那里有一些额外的括号,错误的逗号,但大多数可能是由于试图提供一个简短的例子),但大多数情况下它降临了时间安排。

如上所述,代码时间或多或少,表格不会出现。当然,你必须调用“launchLocDialog()”甚至有希望,但我不认为那是它(可能只是从样本中遗漏)。在任何情况下,删除包装函数并将所有内容放入window.onLoad或文档就绪函数中,表本身似乎有效:

http://live.datatables.net/exinum/4/edit#preview

您没有在代码中看到文档就绪函数,因为JSBin在window onLoad上运行其代码,因此它是多余的。在您的代码中,您将使用其中一个。

所以,问题变成了:

预期的行为是什么?表格是否出现在对话框中?事件绑定到哪里弹出对话框?在原始的launchLocDialog函数中,您似乎能够传递“myDiv”,但我不确定它的作用是什么,因为它以后没有引用。