jQuery не соответствует табличным значениям

Когда я открываю jQuery datatable во всплывающем окне Modal, следующий код возвращает null.

     /**
     * Return the settings object for a particular table
     *  @param {node} nTable table we are using as a dataTable
     *  @returns {object} Settings object - or null if not found
     *  @memberof DataTable#oApi
     */
    function _fnSettingsFromNode ( nTable )
    {
        for ( var i=0 ; i<DataTable.settings.length ; i++ )
        {
            if ( DataTable.settings[i].nTable === nTable )
            {
                return DataTable.settings[i];
            }
        }

        return null;
    }

Этот код взят из библиотеки jQuery. Я хотел знать, при каких обстоятельствах он вернется null,

В общем страница работает нормально. В модальном всплывающем окне, если вы открываете модальное всплывающее окно второй раз и далее, чтобы оно всегда возвращало ноль.DataTable.settings[i].nTable === nTable это условие не соответствует событию, хотя оно имеет одинаковую таблицу на обоих концах.

Пожалуйста, помогите мне.

2 ответа

Вы воссоздаете таблицу каждый раз, когда открываете модальное всплывающее окно? (Это диалоговое окно jQuery?) В этом случае вам может понадобиться сначала запустить fnDestroy().

Вы уничтожаете всплывающее окно и воссоздаете его каждый раз, или просто скрываете / закрываете его? Если вы уничтожаете его, сначала убедитесь, что вы правильно обрабатываете стол - возможно, уничтожите его или переместите в другое место в DOM, чтобы вы могли вернуть его в следующий раз, когда это потребуется.

Используйте этот метод вместо старого.

    // This function sets up click handler for the rows of the
    // data table.
    function _fnSetupMyRowClicks() {
        //Handle the clicks for the rows in the employee table. Note that the
        //.live() is deprecated in 1.7 and the.on() and .off() functions need
        //to be uese.
        //oTable.find('tbody').find('tr').live('click', function (event) {

        //unbind any previously bound click event on the row - just in
          //case the table has gone stale or whatever. Refer to the URL
            //http://www.datatables.net/forums/discussion/comment/43117
            $(document).off('click', 'tbody > tr');

            //And freshly bind the click event, note the use of .on(). The
            //suggested method by Datatables is .live(), but this is deprecated
            //in jQuery 1.7
            $(document).on('click', 'tbody > tr', function () {
                //remove the selection of the currently selected row

                oTable.$('tr.row_selected').removeClass('row_selected');

                //add selection to the row that was clicked
                $(this).addClass('row_selected');

                if (properties.fnRowSelected != null) {
                    properties.fnRowSelected();
                }
            });
        //});
    }
Другие вопросы по тегам