Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   редактирование таблицы (https://javascript.ru/forum/misc/45599-redaktirovanie-tablicy.html)

psfdek 07.03.2014 14:30

редактирование таблицы
 
Как сделать так: выводим таблицу из базы данных, в <table> затем при нажатии кнопки редактировать на строку <tr> все <td> становились <input> и можно было редактировать и затем при нажатии применить или Ctrl+Enter сохранялось и снова становилось таблицей. Может быть есть уже готовые примеры подскажите...

ksa 07.03.2014 14:39

Цитата:

Сообщение от psfdek
при нажатии кнопки редактировать на строку <tr> все <td> становились <input> и можно было редактировать

Дык так и сделай...
Создавай динамически те инпуты... Заполняй их значениями из ячеек...
А потом обратно...

В чем именно проблема?

psfdek 07.03.2014 15:02

Как их создавать в этом и вопрос :)

рони 07.03.2014 15:28

psfdek,
поиск по форуму вашей темы сразу даёт несколько примеров :cray:
удалить элемент input с сохранением его значения в <td>

kostyanet 07.03.2014 20:07

Простой ответ - contenteditable.

Не простой подразумевает типы столбцов и запись значений куда-то еще кроме ячейки.

Создать можно заранее, а потом только показывать в нужном месте.

kostyanet 07.03.2014 20:13

Из своего опыта. Однопольная система отстой. В phpMyAdmin так сделано и жутко достает когда достается что-то там поправить изредка. Эффективнее рендерить всю строку, что открывает обычную возможность переходить с поля на поле табулятором и мгновенно все править.

psfdek 11.03.2014 11:02

Цитата:

Сообщение от рони (Сообщение 301586)
psfdek,
поиск по форуму вашей темы сразу даёт несколько примеров :cray:
удалить элемент input с сохранением его значения в <td>

Там данные в табличном виде, без инпутов. А можно ли затем сразу записать их в БД из таблицы которую редактировал?
И как?

рони 11.03.2014 11:12

Цитата:

Сообщение от psfdek
Там данные в табличном виде, без инпутов

Цитата:

Сообщение от psfdek
все <td> становились <input>

как понять вас?

в примере как раз при клике ячейка становится инпутом - отредактировали кликнули вне таблицы всё введённое сохранилось -- потом обошли все ячейки и отправили отправили данные на сервер

psfdek 11.03.2014 11:25

ну я про конечные данные, они же там после редактирования без инпутов уже, вопрос как правильно записать таблицу в базу потом.

Преобразовать все td в input и занести в массив и потом через While записать в базу. Так? Или это пурга?

Или с помощью ajax сделать что бы каждый отдельный тег тд менялся на инпут при редактировании и после закрытия инпута преобразования обратно в тд и записывал себя в базу, но я не знаю как это сделать.

Как в phpmyadmin

рони 11.03.2014 11:29

psfdek,
зачем вам инпуты то -- берите информацию прямо из ячеек

psfdek 11.03.2014 11:40

Понял, спасибо!

psfdek 11.03.2014 13:17

Цитата:

Сообщение от рони (Сообщение 302133)
.....

Еще возник вопрос, как сделать так что бы в вашем примере: http://javascript.ru/forum/jquery/41...tml#post269823 при нажатии Enter редактирование закрывалось.

рони 11.03.2014 13:43

psfdek,
добавить
.keypress() и по условию что клавиша Enter закачивать редактирование.

рони 11.03.2014 13:52

psfdek,
поставил keyup -- Enter выход из режима редактирования
<!DOCTYPE HTML>
<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
  <script>
$.fn.setCursorPosition = function(pos) {
    this.each(function(index, elem) {
    if (elem.setSelectionRange) {
        elem.setSelectionRange(pos, pos);
    } else if (elem.createTextRange) {
        var range = elem.createTextRange();
        range.collapse(true);
        range.moveEnd('character', pos);
        range.moveStart('character', pos);
        range.select();
    }
    });
    return this;
};
$(document)
       .ready(function () {
           $("td")
               .click(function () {
                   var text =  $(this).html(),
                       varX = $("<input/>", {
                       "value": text,
                       "click": function (event) {
                           event.stopPropagation()
                       },
                       "blur": function () {
                           $(this).parent().html($(this).val())
                       },
                       "keyup": function (event) {
                          event.which == 13 && $(this).trigger("blur")
                       }
                   });
                   $(this).html(varX);
                   varX.setCursorPosition(text.length)
               });
       });
  </script>
</head>

<body>
 <table>
   <tr>
     <td>1234</td>
     <td>1234</td>
   </tr>
   <tr>
     <td>1234</td>
     <td>1234</td>
   </tr>
   <tr>
     <td>1234</td>
     <td>1234</td>
   </tr>
 </table>
</body>
</html>

psfdek 11.03.2014 15:08

Как разрешить только 2 столбец редактировать?
Как запретить редактировать некоторые строки вообще.
Например строки в THEAD

рони 11.03.2014 15:11

Цитата:

Сообщение от psfdek
Как разрешить только 2 столбец редактировать?
Как запретить редактировать некоторые строки вообще.
Например строки в THEAD

изучить селекторы и задать нужное в строке 25
$("tbody tr td:nth-of-type(2)")

psfdek 12.03.2014 07:51

Спасибо!

des1roer 27.01.2015 11:34

tbody tr td:nth-of-type(2) а как к этому добавить еще и третью строку?

рони 27.01.2015 11:45

des1roer,
tbody tr td:nth-of-type(n + 2) - все кроме первой
tbody tr td:nth-of-type(2), tbody tr td:nth-of-type(3) - только 2 и 3 колонка

des1roer 27.01.2015 14:49

tbody tr td:nth-of-type(n+2)


Часовой пояс GMT +3, время: 20:21.