css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
15 Сен
Одна из часто встречающихся задач – представление данных в табличной форме с предоставлением пользователю возможности сортировки, поиска, перехода по страницам, изменением количества записей на одной странице. Плагин jQuery DataTables легко решает все эти задачи. Правда надо заметить, что он все-таки не очень подходит для представления больших массивов данных, но большое количество практических задач решить поможет.
Сначала испытайте как работает этот плагин, а затем подробно разберем его возможности.
Вы можете скачать исходный код примера и воспроизвести этот пример на своем сайте.
* – в архиве не содержатся js-файлы, их можно скачать отдельно в разделе Download.
Нам потребуется подключить в раздел HEAD страницы несколько файлов: само собой разумеется библиотеку jQuery jquery-1.2.6.js и файл плагина jquery.dataTables.js
<script type="text/javascript" src="js/jquery-1.2.6.js"></script> <script type="text/javascript" src="js/jquery.dataTables.js"></script>
Чтобы плагин мог корректно функционировать, при написании HTML-кода таблицы необходимо указать секции thead и tbody. Секцию tfoot указывать необязательно. Вот пример HTML-кода таблицы:
<table id="example" class="display">
<thead>
<tr>
<th>Название</th>
<th>Область</th>
<th>Кол-во</th>
</tr>
</thead>
<tbody>
<tr>
<td>Данные 1</td>
<td>Данные 2</td>
<td>Данные 3</td>
</tr>
..............
</tbody>
<tfoot>
<tr>
<th>Название</th>
<th>Область</th>
<th>Кол-во</th>
</tr>
</tfoot>
</table>
Стилевая таблица включена в файл примера – можете настроить отображение таблицы на свой вкус. Не забывайте только, что плагин использует для работы имена классов. А мы разберем теперь простейший случай использования плагина jquery.dataTables.js. Вот пример:
<script type="text/javascript">
$(document).ready(function(){
$("#example").dataTable();
});
</script>
Вот так просто…. В этом примере мы не передаем плагину никаких настроек, используя настройки по умолчанию. С ними плагин позволит изменять количество записей на странице, осуществлять поиск данных, переходить со страницы на страницу, сортировать данные по столбцам.
Но плагину можно передавать и свои настройки. Передадим путь к файлу с переводом на русский язык, воспользовавшись опцией oLanguage.
<script type="text/javascript">
$(document).ready(function(){
$("#example").dataTable({
"oLanguage": {
"sUrl": "datatables/language/ru_RU.txt"
}
});
});
</script>
Поскольку по умолчанию сортировка данных в таблице происходит по возрастанию по первому столбцу, а нам наверняка может понадобиться какой-либо иной расклад, дополним наш пример и передадим плагину еще пару опций:
<script type="text/javascript">
$(document).ready(function(){
$("#example").dataTable({
"oLanguage": {
"sUrl": "datatables/language/ru_RU.txt"
},
"iDefaultSortIndex": 2,
"sDefaultSortDirection": "desc"
});
});
</script>
В iDefaultSortIndex мы зададим начальную сортировку по третьему столбцу, и в sDefaultSortDirection направление сортировки укажем по убыванию.
С помощью массива объектов aoData можно управлять отображением столбцов в таблице, а также например, исключать некоторые столбцы из поиска. В следующем примере мы ничего не делаем со столбцом «Название», исключаем из поиска столбец «Область» и делаем невидимым столбец «Кол-во».
<script type="text/javascript">
$(document).ready(function(){
$("#example").dataTable({
"oLanguage": {
"sUrl": "datatables/language/ru_RU.txt"
},
"iDefaultSortIndex": 2,
"sDefaultSortDirection": "desc",
"aoData": [
/* Название */ null,
/* Область */ { "bSearchable": false },
/* Кол-во */ { "bVisible": false }
]
});
});
</script>
Я рассказал только об основных возможностях плагина jQuery DataTables. Полный список опций, примеры использования Вы сможете отыскать на странице плагина http://www.sprymedia.co.uk/article/DataTables.
Удачи, коллеги!
Отзывов (106) на «jQuery DataTables – таблица данных»
Классно. А возможно ли задавать опцию «с какого символа начинать сортировку»? Имеется в виду suggest при использовании строки «Поиск».
Хотя , список опций внушительный, нужно покурить.
Coda, sorry, случайно удалил твой коммент, где, как я понял, ты ссылаешься на похожий плагин. Если не сложно – повтори, pls.
Очень кстати! Спасибо)
Друзья, а браузер не сойдет с ума если записей будет около 100000? Пока нет возможности посмотреть исходные коды плагина
Читайте внимательно: «Правда надо заметить, что он все-таки не очень подходит для представления больших массивов данных, но большое количество практических задач решить поможет.» Для подобных задачь нужен уже ajax – не клиентское это дело – записи ворочать.
спасибо Roman
Спасибо! Очень интересно.
Раньше для подобной задачи я прибегал к YUI.
А сейчас почти везде использую JQuery и этот плагин будет очень полезен.
а возможно ли сделать сложную структуру заголовка таблицы????
типа чтоб не одна строка была в заголовке, использовались colspan и т.д….
Почему нельзя? Делайте. Только все равно структура должна быть корректной. Т.е. заголовок столбца по которому осуществляется, например сортировка, должен быть однозначно поставлен в соответствие самому столбцу.
непонятно
«Т.е. заголовок столбца по которому осуществляется, например сортировка, должен быть однозначно поставлен в соответствие самому столбцу.»
как это? можно пример привести… пожалуйста
Имеется ввиду, что объединив (в строке выше) например три ячейки и вписав там опять же например какое-то название, Вы не сможете ничего сортировать кликая по этой (объединенной) ячейке. Только по тем трем, что находятся в строке ниже.
По-моему еще запутаннее получилось…. В общем правило на самом деле одно – таблица должна быть валидной и соответствовать тем условиям, которые определены плагином.
Отличный плагин.
Сейчас буду тестировать. Возможно это как раз то, что я искал
Отличный плагин…
Единственная проблема – не работают формы (т.е. кнопка отправить никак не реагирует) внутри таблицы. Есть какой-нибудь выход?
Наверное все-таки не «не работают», а «не могу сделать», правда? Какой выход Вы хотите? Попробуйте повнимательнее изучить селекторы jQuery – 95% всех «не работает» связано с неправильным выбором элементов. Остальные – как правило с нарушением причинно-следственных связей – т.е. например обработчик на элемент вешается раньше, чем этот элемент появляется в DOM’е.
Тестируйте код по шагам, тем же FireBug’ом. Даже обычный alert() в большинстве случаев подойдет…
Геннадий! Все бы ничего, да вот не разбираюсь я в js
) Сделал просто все как в примере у Вас на странице. У меня в строчках таблицы есть формы сохранения и добавления данных в таблицу.
Решил не ломать голову и вынес эти формы в отдельные таблицы. Теперь жизнь налажена.
Спасибо за статейку и за оперативный ответ
)
Все ничего, но даже при небольшом объеме данных( порядка 200 записей), он начинает жутко тормозить! есть ли какие пути ускорить работу плагина с большим объемом информации? или проще разбивать на небольшое колличество записей, да тянуть с базы постоянно?
vitol_1, возможно Вам стоит более внимательно читать. В самом начале написано: «Правда надо заметить, что он все-таки не очень подходит для представления больших массивов данных, но большое количество практических задач решить поможет».
Кстати, в работающем примере 272 записи и никаких тормозов нет и в помине – это совсем небольшой объем. Так что на нескольких сотнях записей этот плагин поможет решить проблемы. На нескольких тысячах – лучше искать другое решение.
Я никак не могу понять как и каким образом прикручивается база…
Помогите пожалуйста) я только начинающий)
База, в смысле таблица? Никак не прикручивается, она находится в самом файле – посмотрите исходные коды. Другой вопрос, как она там появляется – просто ли написана «руками» или сгенерирована серверным сценарием. Но это совсем некритично.
то есть вот так
Данные 1
Данные 2
Данные 3
а потом уже сортируем?
Дело в том, что у меня задача, чтобы из определенного файла эта информация обрабатывалась скриптом, а потом уже кидалась в табличку на странице. И даже не знаю, как удоюней это сделать =)
Сделать это можно например с помощью того же PHP. Читаете файл и в цикле выводите строки таблицы. К готовой таблице цепляете плагин DataTables.
окей. посмотрел) я понял)
теперь еще вопрос. у меня вместо русских букв отображаются квадратики. И строчка «Показано с по из строк» со стрелочками почему-то не под концом всего списка, а на определенном месте…
Квадратики – данные с сервера должны быть в той же кодировке, что и файл, который занимается их обработкой. Лучше, если это будет utf-8 – избежите много лишних проблем. Что касается второй части вопроса – то это скорее всего связано со стилями. Смотрите CSS.
Всем доброго времени суток!!! Обнаружил траблы с сортировкой… У меня данные – это время в Unix формате… При сортирование данные выводятся не правильно отсортированными, причем вывожу данные как отформатированные с помощью функции date(), так и просто в Unix формате… Может это связанно с переполнением???
Спасибо. Добавлено в закладки
>>Единственная проблема – не работают формы (т.е.
>>кнопка отправить никак не реагирует) внутри
>>таблицы. Есть какой-нибудь выход?
Мучался долго…
#price – Моя таблица
$(«#price»).bind(«change», function(){
$(«#price input[type=checkbox]«).click(
function(){
if (this.checked){
$(this).next().attr(«disabled»,»")
}
else{
$(this).next().attr(«disabled»,»disabled»)
}
})
});
>>обработчик на элемент вешается раньше, чем >>этот элемент появляется в DOM’е
Как с этим бороться?
Как постоянно отслеживать что происходит с обектом?
напр: сортировка…
Обработка событий для элементов DOM, загружаемых через ajax и Плагин Live Query
А в версии 1.3.1 есть новый метод live(), но если Вы используете плагины, наверное на нее переходить рановато, т.к. сами плагины могут быть несовместимы с новой версией.
насколько я понимаю, данные таблицы не индексируются поисковиками?
Скорее всего индексируються, т.к. скрипт берёт уже готовую хтмл таблицу и потом с ней работает.
По этому индекс должен прокатывать
но по идее спайдеры берут уже готовую хтмл-страничку, которая нам в браузер выводится, а точнее её код, в котором как раз таки и нету данных таблицы.
Александр, таблица в HTML-коде присутствует. И неважно, написана она «руками», или сгенерирована серверным скриптом в ответ на запрос – в браузер выводится HTML-код таблицы и ее данные. Это однозначно. Т.е. если открыть исходный код – Вы там увидете всю таблицу. А плагин позволяет представить дело так, как будто эта таблица разбита на страницы и т.д.
просто когда я открываю эту страницу в html, я её нахожу, а точнее её заголовки, но данных нигде в коде нет. поэтому и возникает вопрос – а собственна раз их не видно, то индексируются ли они
Ну Вы посмотрите пример… Таблица «рисуется» руками. Даже если это делается на сервере и вываливается в браузер, то видеть Вы должны одно и то же.
Данных не будет видно в случаях, если Вы либо подгружаете данные через ajax-запрос и вставляете в нужное место, либо просто вычисляете средствами js и опять же вставляете в DOM. Тогда да – их и не видно и они не будут индексироваться.
ага, вот оно что.
спасибо за разъяснение! сам пример я просто не смотрел – пробегал мимо статьи, немного глазком глянул, взглянул и вопрос возник
Ну так зачем задавать вопроссы которых изначально можно не задавать, а просто прочитать статью?
вопрос всё равно возник бы, просто тогда бы на данный момент не было бы двух пар лишних каментов)
Вопрос такой хотелось бы задать.. Сам я JS вобще не знаю.
Как-нибудь можно сделать, чтоб поиск не делался только по последнему столбцу. Просто дело в том, что у меня всегда таблицы из разных столбцов получаются. Если бы всегда фиксированные столбцы были бы, то и сам бы справился. А так что-т не получается разобраться, как же оно делается)
У меня следующая задача: данные таблицы должны подгружаться с пом ajax. Т.е. в зависимости от параметров запроса GET меняется содержимое таблицы. Но здесь проявилось следующее свойство: сначала выстраивается в окне вся длинная таблица и затем через секунду данные разбиваются на части по 10 как в Вашем примере к плагину. В итоге, при запросе данных из базы, проявляется эффект подергивания таблицы, что очень неприятно смотрится. Этот эффект не наблюдается если таблица формируется единожды при загрузке самой страницы. Можно ли как нибудь скрыть первоначальный показ неразбитой таблицы?
Если многостраничная таблица по высоте больше окна, есть ли возможность настроить прокрутку на начало таблицы при переключении страничек?
В самом плагине вроде нет, а если пробовать «прикрутить» самостоятельно, то – изображение стрелок туды-сюды имеют соответственно классы .paginate_enabled_previous и .paginate_enabled_next. Попробовать связать с кликом по ним вызов callback-функции, которая бы использовала методы offset(), scrollTop(val) прокручивала страницу к нужному месту.
Это – как идея, сам не пробовал.
есть много примеров красивых таблиц, например, здесь – http://www.w3school.ru/blog/web-development/tables-and-data-grids-with-ajax-dhtml-javascript.html
у вас представлена таблица вместе с исходниками, ее очень легко повторить. СПАСИБО!
А можете написать руководство по созданию таблиц, у которых можно изменять ширину столбцов?
Плагин отличный, все работает просто отлично. Может кто знает как по умолчанию отключить сортировку? но потом если пользователь захочет, то может сортировать данные как ему заблагорассудиться.
у меня строки имеют id и действие на ondbclick. как сделать, чтобы js-код их не удалял?
Настроить прокрутку на начало таблицы при переключении страничек удалось только включением строчки window.scrollTo(0, $(‘#demo’).offset().top);
в файл jquery.dataTables.min.js.
Событие Click для paginate_button не перехватываются, а якоря почему-то работают некорректно.
Плагин замечательный, спасибо за обзор!
А как добавить на страницу с обеих сторон таблицы, например, стрелки. Если вызвать подряд функции insertBefore и insertAfter, то добавляется все равно только с одной стороны.
To Olga:
Вы бы как-то почетче что ли формулировали…. Даже не знаю, что я должен ответить на Ваш последний вопрос. Про какую таблицу идет речь? Ведь в плагине стрелки и так предусмотрены.
Gennady, я имела в виду, чтобы стрелки с двух сторон таблицы были (и сверху, и снизу)
Опций для этого не предусмотрено, насколько я знаю. Есть опция sPaginationType в которой можно переопределить эти стрелочки туда-сюда из ‘two_button’ по умолчанию, в ‘full_numbers’ – цифирки.
я так понимаю, что эта таблица предназначена только для вывода данных и поиска и никак не предусмотрена на какие-то еще действия (например, клик на строку), т.к. все id и действия, привязанные к строкам исчезают после срабатывания этого скрипта.
Это издержки использования плагинов. Т.е. если Вы хотите иметь функционал, который плагином не предусмотрен – Вы будете вынуждены разрабатывать свой код…
Кстати, этот плагин для работы с таблицами далеко не единственный, просто он подкупает своей простотой (относительной конечно)…
Попробуйте покопать в на сайте jQuery, вот тут
http://plugins.jquery.com/project/Plugins/category/54
собраны плагины, которые тем или иным образом работают с таблицами. Может и найдется что-то подходящее.
Скажите пожалуйста, а можно ли как-нибудь сказать скрипту, чтобы он предлагал выводить не по 10/25/50/100 записей на странице, а скажем по 50/100/150 ? или хотя бы сделать так, чтобы стандартно стояло 50? Очень нужно..
Заранье благодарю =)
senneco, можно. найдите в скрипте, где создается список, и там добавьте необходимые строки, а чтобы стандартно стояло какое-нибудь значение, то еще в скрипте у нужного элемента допишите selected=»selected». по крайней мере я так сделала – работает.
Только что обнаружил в исходнике скрипта переменную iDisplayLength, которая как-раз отвечает за стандартное количество строк на странице. Затем обнаружил её описание и в документации )
А я когда-то пробовал – вроде не помогло..
Ольга:
Спасибо, конечно, за помощь, но Вы посоветовали то, что я как раз и попробовал в первую очередь сделать
прокрутка вверх таблицы при листании страниц:
включаем строку
window.scrollTo(0, $(‘#’+oSettings.sTableId).offset().top);
в функции
«$(nFirst).click»,
«$(nPrevious).click»,
«$(nLast).click»,
«$(«span»,oSettings.nPaginateList).click».
Я на jq новичок но вот очень мне хочется узнать как после создания таблицы раскрасить ее в шахматный порядок?
Очень просто:
$('td:even').css('background-color','#f99');//четные $('td:odd').css('background-color','#99f');//нечетныеоснова всего – селекторы, которые обеспечивают выбор тех элементов DOM, с которыми предстоит работать.
В примере мы сначала выбрали все четные ячейки таблицы и установили для них цвет бэкграунда, а потом тоже самое проделали с нечетными ячейками.
после того как вставил у меня получилось что столбцы рсскрасились в разный цвет но никакго шахматного порядка.
Сергей, я везде стараюсь демонстрировать лишь принципы, но решать задачу Вам все равно самому….
В примере в разные цвета раскрашиваются четные и нечетные ячейки таблицы. Если столбцов в таблице 3,5 или например 7 (т.е. нечетное число), то шахматный порядок будет. Если же столбцов четное количество – шахматного порядка не будет.
Я Вам показал один из вариантов решения и упомянул, что основа всего – селекторы. Именно с помощью них Вы должны выбирать элементы с которыми будете работать. А прочитать пару-тройку статей (на русском языке) про селекторы jQuery, неужели это утомительно? Причем и на будущее пригодится.
да действительно))) у меня таблица 8*8 так что ща почитаю как это сделать….
спасибо! с таблицами очень помогли!!!!!!!!!!!!
Жирненько! Сейчас будем крутить!
Автору спасибо!!!!!!
Я думаю никого не затруднит сделать так, чтобы выделялись строки таблицы, когда по ним кликают.
А как сделать, чтобы нажимая на стрелки «вниз», «вверх» происходило управление выделением строк?
Практически все тоже самое, только надо воспользоваться событиями keydown, keypress или keyup (тут наверное от конкретной реализации надо идти) и по событию проверять свойство keyCode. Стрелка вверх – код клавиши 38, вниз – 40.
Спасибо за пост. Интресно написано.
Ограомное спасибо! То что надо.
У меня по крону каждый день создаётся html -ка с таблицей,которая показывается юзверям. При сдаче проекта шэф сказал сделать постраничную навигацию. Лезть обратно в крон или на пых – впадлу.
Самый оптимальный вариант – jquery. Ещё раз сенкс.
Странно а у меня не заработала. Таблица появилась и все ничего больше. Хотя Джей Куэри прикрутил и jquery.dataTables.js тоже Подскажите в чем может быть проблема??????
нету не поиска не сколько покозывать??? Помогите ума не приложу что делать. Уже перезалил два раза и ничего.
Через консоль показывает ошибку
$ is not defined
Что это?? Ведь все делал как у вас написано!!!
$ is not defined – не определен объект/функция jQuery. Если по-русски – библиотеки не видит… Проверяйте пути.
Странно как то через Inspect Menedjer в мозиле библиотеку Джейкуери просмотреть можно было. Скопировал имя библ Джейкуэри из папки и все заработало.
Простите великодушно мой косяк.
Может кто подскажет, как сделать чтобы по клике на строку можно было пеходить на другую страничку?
В общем случае так:
$("tr").click(function(){ window.location.href = "http://www.ya.ru"; });попробовала вставить, что то никак не реагирует
я же написал – в общем случае…
Если применительно к самому плагину – работать будет на первой странице, но как только перейдете на другую или что-нибудь например отсортируете, то в таком виде работать уже не будет.
Надо использовать метод live, если работаете с версией библиотеки 1.3+ (если ниже – будет нужен дополнительный плагин LiveQuery).
Вот так примерно:
$("#example").dataTable(); $("#example tr").live("click", function(){ window.location.href = "http://www.ya.ru"; });Тогда клик будет ловиться где угодно…
Большое спасибо
Скажите пожалуйста, а есть здесь возможность по умолчанию не сортировать таблицу вообще? Никак не могу разобраться.
Честно говоря, не нашел отключения сортировки вообще. Хотя плагин довольно большой и серьезный, может на самом деле я просто не нашел опции.
Посмотрите еще:
http://www.datatables.net/
я решила проблему так «aaSorting»: [ ]. Но к сожалению проблемы с долгой загрузкой это не решило
. Таблицу около 50 строк 4 колонки грузит больше 10 секунд.
Olga, значит принципиально что-то не так. Посмотрите даже демо – 272 строки грузятся гораздо быстрее….
Как идея – может быть данные какие-то «хитроформатированные»?
Gennady
Большое спасибо за труды!
Ваша книга по Ajax в настоящее время моя настольная.
Такой вопрос. При загрузке страницы таблица с определенным количеством записей сначала разворачивается на всю высоту и только потом урезается до первой страницы. Особо заметно при медленном интернете (здесь в Вашем примере также видно). Выглядит все это как-то некомфортно что-ли… Существуют ли какие-нибудь способы выводить в браузер сразу только желаемый результат? Это разумеется касается не только данного плагина
Если только желаемый, то запросом к серверу – обычным или ajax-запросом, если подразумевается какие-то действия пользователя, при которых и данные в таблицы поменяться должны и страница не должна перезагружаться…
Тут фантазировать можно много, а какое-то конкретное решение уже выбирать для конкретной задачи.
З.Ы. Спасибо за добрые слова про книгу
Могу сказать, что уже скоро должна появиться еще одна – «jQuery – рецепты программирования». По сути справочник по методам и вспомогательным функциям библиотеки, по всему UI jQuery и самым популярным плагинам. Ес-но с огромным количеством конкретных примеров.
А просто скрывать внутреннее содержание div’a до тех пор пока оно полностью не загрузится и обработается наверно как-то возможно?
По поводу книжки по jQuery – отличная новость! Спасибо
Если говорить не о конкретном плагине, а вообще, то решение должно идти от задачи – нет чего-то общего и универсального. Например, если ждать загрузки картинки, можно использовать событие load и по нему показывать картинку. При загрузке чего-либо с помощью ajax-запросов – использовать callback-функции в соответствующих опциях настройки запроса и т.д….
Да, этот плагин конечно силён! Можно почти для любых целей приспособить! Приношу благодарности Геннадию за просвещение и конечно создателю Allan Jardine
Советую обратить внимание на http://trirand.com/jqgrid/jqgrid.html
более функциональная штуковина как мне показалось
Здраствуйте, у меня такая проблема: моя страница находится в кодировке windows-1251 и при подключении опции oLanguage с русским языком выводятся закарлючки. Как можно реализовать перекодировку файла ru_RU.txt из utf-8 в windows-1251? Или не перекодировку, а что-то другое более функциональное
И еще один вопрос, у меня на сайте в таблицу из БД выводятся строки с информацией при чем если этих строк больше 15 появляется постраничная навигация. И с этим начинаются поблемы, плагин так как работает на стороне клиента, как я понял, ищет строки не всей таблицы, а только 15 записей. Так вот как бы мне сделать так чтобы сохранить и постраничную навигацию и использовать этот плагин для поиска по всей таблице, а не по 15 строкам, если это вообще возможно.
To neman:
А Вы неверно поняли – таблица в браузер выгружается полностью, с помощью JS добавляется навигация и поиск происходит именно в том, что было выгружено в клиент, т.е. в полной таблице, но никак не на одной странице…
З.Ы. Что касается перекодировки – это делается с помощью какого-либо редактора, который позволяет выбирать требуемую кодировку при сохранении файла. Как правило, серьезные редакторы, которые используются в разработке это сделать позволяют.
У меня при первой загрузке таблицы выводятся все строки, а не 10 как выставленно в параметре сортировки, после его изменения, например на 25, все начинает нормально работать. Подскажите, пожалуйста из-за чего это может происходить.
Немного данных для анализа…
Ну, могу предположить, что код не заключен в конструкцию
$(document).ready(function(){ ........ });т.е. при загрузке не происходит
$("#example").dataTable();инициализация плагина. По крайней мере описанный симптом наводит на такие мысли…
Да в том то и дело, что код заключен в эту конструкцию, а в таблице находится 84 строки, но в этих строках ноходятся картинки, но я проверял и на 16 строках, все равно не работает
Может причина в содержимом ячеек, а именно в картинках? Может Вам попробовать от простого к сложному? Запустите таблицу очень простую, заставьте работать как положено, а потом наращивайте те возможности, которые Вам нужны…
Все нашел ошибку, она заключалась в том, что нумерация столбцов для сортировки таблицы начинается с 0, а не с 1, и так как у меня в строке было две ячейки, то параметр «iDefaultSortIndex»: 2 вызывал подобную ошибку, изменил 2 на 1 и все заработало.
Спасибо Gennady за идеи!
Здравствуйте, у меня проблема: вобщем, есть табы, при клике на таб, получаю данные аджаксом и помещаю их в таблицу, после чего хочу вызвать $(«#myTable»).dataTable();, и оно ругается что не видит данные, думал воспользоваться live, но оно без типа события работать не будет, а тип события мне там не нужен, решил вызвать $(«#myTable»).dataTable();, после получения данных в complete, как можно решить эту проблему?
$(«#bookmarks»).tabs({
fxFade: true,
fxSpeed: ’slow’,
remote: true,
select: function(event, ui)
{
var selectedTabID = ui.panel.id;
$.ajax({
type: «POST»,
cache: true,
url: host + «/includes/functions/bookmarkbody.php»,
data: «workpage=» + selectedTabID,
success: function(msg)
{
$(‘#myTable’).html(msg);
},
complete: function()
{
$(«#myTable»).dataTable();
}
});
},
selected: -1
});
Ход мысли имхо, верный. И что? Такой расклад тоже не прошел что ли? Табличка верно ли рисуется? THEAD, TBODY на месте?
в переменную msg все правильно приходит, я забыл там сделать проверку Instance объекта dataTable и если пройтись по всем моим табам, начиная с третьего оно срабатывает(на работе, дома не хочет), если проходится несколько раз, похоже что он несколько раз создает Instance, (web developer)javascript console ФФкса говорит что в файле этого плагина ошибка,
Ошибка: sData is undefined
Источник: jquery.dataTables.js
Строка: 701 ,
странно, на работе делал говорит что одна ошибка, дома сейчас проверил появилась еще одна
Ошибка: nThs is null
Источник: jquery.dataTables.js
Строка: 4669
она у меня появлялась, если я пытался проинициализировать до того как появятся данные полученные ajax
Все нашел ошибку, это мой бок был в формировании данных, вложенный и внешний цикл, местами поменял кол-во проходов по ним
Спасибо
Все перерыл в гугле, на оф. сайте, нигде не могу найти как удалить старый instance datatable, т.к. при переходе на следующий таб, данные заменяются, но при этом создается еще одна строка поиска, ну и все стандартные компоненты, я конечно нашел варварский способ, но мне он не нравится
if(instance == 1)
{
$(‘#’ + ‘myTable’ + ‘_wrapper’).remove();
$(‘#’ + ‘myTable’ + ‘_length’).remove();
$(‘#’ + ‘myTable’ + ‘_filter’).remove();
$(‘#’ + ‘myTable’ + ‘_info’).remove();
$(‘#’ + ‘myTable’ + ‘_paginate’).remove();
$(‘#’ + ‘myTable’ + ‘_previous’).remove();
$(‘#’ + ‘myTable’ + ‘_next’).remove();
$(‘#’ + selectedTabID).html(«»);
instance = 0;
}
в последенем создается таблица, и это я делаю перед получением данных
Алексей,
Вы сами пишете, сами же себе отвечаете 
Если честно, я давно потерял нить рассуждений. А если еще честнее, я обычно (подчеркиваю – обычно), какие-то пояснения даю о принципах, но если я буду вникать в детали и стараться помочь всем, то умру с голода, потому что с работы прогонят
наверно вопрос не в тему, по поводу редактирования с помощью плагина jquery.jeditable.js в плагине описаном выше…
файл.js
oTable = $(‘#table’).dataTable({
«bJQueryUI»: true,
«bProcessing»: true,
«bServerSide»: true,
«sAjaxSource»: «table.php»,
«aoColumns»: [
{ "sClass": "center", "bSortable": false },
{ "sClass": "center", "bSortable": true },
],
«aaSorting»: [[1, 'desc']],
«fnDrawCallback»: function(){
/* тут удаление, проблем нету*/
$(‘.edit’).editable(‘actions.php?action=update’,{
id : «id»,
name : «title»,
type : «text»,
event : «dblclick»,
cancel : «Cancel»,
submit : «OK»,
style : «inherit»,
indicator : «»,
tooltip : «Кликнуть дважды для редактирования…»,
«callback»: function(value, settings) {
oTable.fnDraw();
}
});
}
});
таблица.php
while ($aRow = mysql_fetch_array( $rResult )) {
$sOutput .= «[";
$sOutput .= '" Уд. ",';
$sOutput .= '"'.addslashes($aRow['title']).’»,’;
$sOutput .= «],»;
}
function fnColumnToField($i) {
if ( $i == 1 )
return «title»;
}
действия.php
if (isset($_POST['action'])) {
switch($_POST['action']) {
case «update»:
$title = mysql_real_escape_string(strip_tags(trim($_POST['title'])));
$query = «UPDATE `table` SET title=’{$title}’ WHERE id=’».intval($_POST['id']).»‘»;
mysql_query($query) or die(sql_failure_handler($query, mysql_error()));
break;
}
}
проблема в том что не обновляется запись,а удаление проходит на ура! в чём косяк?
Заранее спасибо.
Ну….. Хотя, если в принципе какие-то действия (удаление) выполняются, значит Ваше решение в общем и целом работает. Тогда в чем разница между удалением и редактированием? Только в том, что для удаления записи из БД идентификатора достаточно, а для обновления этого недостаточно…
title на сервере появляется, проверяли?
Спасибо, за оперативный ответ, разобрался.
никак не могу понять как задать выделение строки при выполнении условий, к примеру что в столбце с кол-вом к примеру цифра больше 5… подскажите плиз.
Честно говоря давненько не использовал плагин. Сейчас бегло пробежался по документации – там разве есть намеки на такую возможность?
На самом деле это очень просто сделать даже если в плагине такой возможности нет…
Как именно? Давайте продолжим обсуждение на форуме. Задайте вопрос там, а то количество комментариев уже превышает разумное.
Обсуждение закрыто.