Проблемы с DataTables и диалоговым окном jQuery - PullRequest
0 голосов
/ 01 апреля 2012

У меня проблемы с получением таблицы данных (http://datatables.net/) для работы в простом диалоговом окне jquery. Когда я нажимаю кнопку, чтобы открыть окно, вы можете увидеть данные в течение секунды, а затем сразу же закрывается. Любые мысли были бы чрезвычайно признательны.

Моя функция для запуска диалогового окна показана ниже. Внутри него данные инициализируются.

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 Ответ

1 голос
/ 01 апреля 2012

Просто рассмотрим настройку некоторых тестов для этого, но не в моей голове ... у вас есть функция готовности документа внутри вашей именованной функции. Я не смог проверить все последствия этого, но это, как правило, не сделано.

Использование документа, готового к запуску функций, которые должны ждать, пока DOM не станет доступным для сценариев, - это именно то, что нужно для настройки вашего oTable; тем не менее, я думаю, что вложение ее в именованную функцию, которая вызывается (в какой-то момент ... эта часть кода не видна в образце), может иметь неожиданные последствия.

Обновление:

В коде были некоторые изюминки, которые я попытался немного исправить (некоторые дополнительные скобки тут и там, неуместные запятые, но большая часть этого, вероятно, из-за попытки дать краткий пример), но в основном это сводится к на время.

Если время выполнения кода более или менее, как указано выше, таблица не появится. Конечно, вам придется вызывать "launchLocDialog ()", чтобы даже иметь надежду, но я тоже не думаю, что это было так (это, вероятно, просто отсутствовало в примере). В любом случае, удалите эту функцию обертывания и поместите все в window.onLoad или функцию готовности документа, и сама таблица, кажется, будет работать:

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

Вы не видите функцию готовности документа в коде, потому что JSBin запускает свой код в окне onLoad, поэтому он был избыточным. В вашем коде вы использовали бы один или другой из них.

Итак, возникает вопрос:

Какое поведение ожидается? Таблица должна появляться внутри диалога? Где событие должно появиться в диалоговом окне? В оригинальной функции launchLocDialog вы, кажется, можете передать «myDiv», но я не уверен, какую роль он должен был сыграть, поскольку на нее не ссылаются позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...