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();
}
});
//});
}