| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Редактируемая таблица с динамическим сохранением |
| Автор: zevgan 24.8.2009, 17:22 |
| Доброго времени суток. Нужно сделать таблицу в html с возможностью редактирования содержимого ячеек по двойному клику мышкой и динамическим сохранением внесенных изменений в MySQL БД по нажатию ентера без перезагрузки страницы. Если кто-то знает скрипт, который делает хотя бы часть из перечисленного - буду оооооочень признателен А если такого нету, тогда вот вопросы по жабаскрипту: Как по двойному клику мышкой по ячейке удалить её содержимое, поместить в эту самую ячейку текстовое поле и уже в само это поле бросить старое содержимое ячейки. Затем отследить нажатие ентера в данном текстовом поле, убрать текстовое поле, поместить в ячейку изменённые данные и сохранить это изменение в БД без перезагрузки страницы. Для последнего думаю юзать библиотеку JsHttpRequest. Заранее спасибо за любой ответ. |
| Автор: bars80080 24.8.2009, 17:59 |
| вариант по моему не слишком кошерный, хотя бы потому, что ячеек в таблице может быть довольно много, растягивать их бесконечно тоже не есть гуд, в итоге, если туда ещё запихивать поле, и может даже с кнопкой - таблица будет дёргаться и т.п. вариант по проще: просто таблица, с ячейками в которых значения. на каждой ячейке событие onclick с вызовом функции. функция открывает скрытое до тех пор поле (display: none; / block;) банальный div с вложенным полем textarea и двумя кнопками "утвердить", "отменить" при открытии этого поля, из ячейки копируются значение в поле. далее, я бы оставил тему о перезаписи одной ячейки на сервере. смысл? запросы имеют тенденцию к выполнению в течение нескольких секунд, пока туда-сюда вернётся, что-нибудь может случить. потому, я бы ввёл другую систему: изменение значений нескольких ячеек, а затем перезагрузка страницы и перезапись всех указанных ячеек во всех указанных строчках. имхо здесь и будет максимальная экономия на ресурсах и наибольшая надёжность системы. в таком случае по нажатию кнопки "утвердить" должно происходить сравнение содержимого поля и редактируемой ячейки. если произошли изменения, то: а) скопировать предыдущее значение ячейки в скрытое поле input:hidden, дабы можно было откатить назад б) скопировать содержимое textarea в ячейку в) скрыть поле textarea г) пометить ячейку цветом, как отредактированную д) открыть кнопку "сохранить изменения" конечно, тут основная работа будет заключаться в сохранении идентификатора ячейки, сохранении в отдельном поле идентификаторов редактируемых строк и ячеек ,а потом на сервере ещё надо будет придумать как это всё разгребсти тут конечно возникает серьёзный вопрос, а ты знаешь что за таблица будет редактироваться? или это универсальный скрипт под любую таблицу, которому будет отдаваться только имя таблицы? |
| Автор: zevgan 24.8.2009, 18:30 |
| Большое спасибо, очень дельная идея. Да, таблица мне доступна, в ней 45 столбцов, а количество строк будет варьироваться примерно от 1 до 100, а может и больше... Короче говоря, примерно 4500 ячеек. Кошерно ли будет у каждой ячейки указывать "onclick="? Или есть другой способ, что-то вроде глобального отслеживания щелчка и постфактум выяснения, над какой ячейкой сейчас находится курсор? textarea наверное лучше всего было бы ещё и позиционировать на место редактируемой ячейки (сугубо с точки зрения юзабилити)... Как считаете? Да и вот ещё, уместно ли у каждой ячейки указывать уникальный id? Их всё-таки будет много... |
| Автор: comtat 24.8.2009, 22:14 |
| Продолжу список от skyboy и предложу http://extjs.com/deploy/dev/examples/grid/edit-grid.html для ExtJS |
| Автор: bars80080 24.8.2009, 23:38 | ||
ну, если генерировать таблицу на сервере, то ничего особенного. если даже эти килобайты слать не хочется, то можно наградить событием onclick каждую ячейку средствами javascript уже после загрузки страницы. просто пробежавшись циклом по ячейкам и присвоив каждому элементу событие:
как-то так собственно можно ориентироваться и по номеру в массиве |
| Автор: zevgan 25.8.2009, 01:59 |
| Большое всем спасибо за ответы. Пришёл в восторг от EditorGridPanel. Только есть одно усложнение, про которое я забыл написать. Дело в том, что в зависимости от залогиненного пользователя меняются права записи в определённые столбцы. Тоесть скажем пользователь ХХХ может изменять только 3, 5 и 6 столбцы. Это возможно будет реализовать на данной штуке? |
| Автор: comtat 25.8.2009, 08:34 |
Это усложнение можно решить написав небольшой плагин к EditorGridPanel |
| Автор: zevgan 4.9.2009, 04:40 |
| Долго не появлялся, писал табличку по чайной ложке в день... Опытным путём выяснил, что EditorGridPanel в моём случае не подходит, а оооочень жаль. Дело в большом объёме данных - изменилось количество строк со ста примерно до 400. С EditorGridPanel такая табличка загружается минуты. В то время, как моя корявая самописка с одним лишь прикрученным JsHttpRequest в среднем 12-30 секунд. Если я не прав в своих выводах относительно EditorGridPanel, пожалуйста, напишите, как заставить его работать быстрее. Сейчас встал перед на первый взгляд тривиальной задачей - статичный хедер у таблицы по ширине во много раз большей, чем ширина окна. Сложность в том, чтобы горизонтальный скроллбар крутил всю таблицу включая хедер, а вертикальный только строки без хедера и притом, чтобы вертикальный скролл находился всегда в поле зрения. Поскольку это уже другой вопрос - сейчас создам новую тему. Буду благодарен за любой совет (за сегодня перерыл кучу вариантов). |
| Автор: comtat 4.9.2009, 08:40 |
Очень на него не похоже .. |
| Автор: zevgan 4.9.2009, 15:43 |
| Не знаю, я его первый раз ручками-то пощупал. Но ведь и ячеек-то в общей массе получается до 18000, а это уже как говорится не этим-самым груши околачивать... |
| Автор: Nigneeliz 13.11.2022, 20:54 |
Модератор: Сообщение скрыто. |
| Автор: scalosale 8.2.2023, 23:00 |
Модератор: Сообщение скрыто. |