Показать сообщение отдельно
  #14 (permalink)  
Старый 14.07.2015, 14:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Эдди
В этой же строке кнопки "+" и "-". Добавить строку или удалить.
Этого было бы достаточно, чтобы понять цель. А если Добавить, то клонирование существующих полей формы не годится. Нужно добавлять "чистые поля", и все, которые необходимы для добавления новых данных. И не значение id нужно увеличивать, а индексы полей или же в случае, если дынные привязываются какому либо идентификатору, то копировать в новые добавляемые поля эти идентификаторы, в случае же добавления новых записей, то временный идентификатор, диапазон которого зависит от максимального значения первичного ключа.

Попробуйте написать если и не универсальное на все случаи, но хотя бы в рамках этого администрирования, если вставка нужна не только для данной задачи. А делать это лучше так, например, пусть сам тег формы или иной удобный родитель содержит html-код вставки. Не времени все подробно пояснять, поэтому кратко:

1) html-код вставки - описывает полностью структуру "строки" в форме в которая добавляется, а не только поля формы. То есть, например, если элементы формы находятся в ячейках таблицы, то вставляемый код будет: <tr><td><input name="name(k1:)[]"></td>td><input name="name(k2:)[]"></td>...</td>.

2) :k1:, :k2:,... условно значения имен, ключей и т.п., которые после вставки нужно заменить значениями.

3) кнопка добавления новой строки в атрибутах data должна описывать замещаемые значения и значения на которые они будут замещены. Например, data-rem=":k1:,name1/:k2,<?=$id?>:",...
Подобным образом задаются любые иные параметры, которые необходимо изменять, добавлять или же передавать как значения в функцию, как и содержать ссылки на функции, которые нужно выполнить, если нельзя написать универсально для любой вставки, и требуется выполнение неких специфичных функций.

4) если имена привязываются к первичному ключу/ключам, это означает, на значение сверху наложен лимит. Поэтому вставка должна иметь счетчик, значения которого используются при вставке, и ссылка на счетчик указана в data-rem.

5) html-код вставки храниться также в атрибуте data-ins, а кнопка "Добавить" имеет ссылку на этот атрибут, по ins. то есть вставляемых "html_вариаций" может быть сколь угодно, как и кнопок добавления, каждая из которых будет добавлять свой html-код. При чем вставляемый html-код также может иметь кнопку "Добавить" - добавление внутри добавляемого.

6) кнопка "Добавить" также должна иметь атрибут содержащий указатель родительского элемента в который вставляется код. В примере с таблицей, это будет например, data-prt="table".

7) вставляемый код содержит кнопку "Удалить" содержащую указатель на удаляемого родителя, для пример это будет data-prt="tr".

Непосредственно спрятать в атрибут data html-код не получиться, поэтому можно прибегнуть к base64, но лучше url кодирование, значения будут короче. То есть типа <form data-ins="<?=rawurlencode(вставляемый html-код)?>", а на клиенте в обработчике кнопки "Добавить" получать его - decodeURIComponent(this.getAttribute("data-ins")). Если все обдумать, то единый обработчик будет добавлять любой html-код на страницу, параметры которого описаны в атрибутах.
Ответить с цитированием