Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.07.2015, 10:26
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Как переназначить id всех элементов <input> в форме при добавление нового <input>
Есть форма с таблицей, где в каждой строке имеется input:
<input id="chek1"
<input id="chek2"
<input id="chek3"

В каждой строке есть кнопка "+", которая копирует строку с текущим id при помощи функции JS.
Получается следующее:
<input id="chek1"
<input id="chek2"
<input id="chek2"
<input id="chek3"

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

Как же дополнить уже имеющуюся функцию JS циклом, чтобы получить:
<input id="chek1"
<input id="chek2"
<input id="chek3"
<input id="chek4"

Буду очень благодарен.
Ответить с цитированием
  #2 (permalink)  
Старый 13.07.2015, 08:17
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,223

Сообщение от Эдди
Как же дополнить уже имеющуюся функцию JS циклом, чтобы получить:
<input id="chek1"
<input id="chek2"
<input id="chek3"
<input id="chek4"
Вывод один - не клонировать инпут, а делать новый.
Ответить с цитированием
  #3 (permalink)  
Старый 13.07.2015, 11:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

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

Если вставка не лимитируется со стороны SQL, значит при загрузке страницы получить в форме элементы, которые клонируются, среди них найти максимальный номер, например:

var max = element.id.match(/\d+$/); - где element это полученный каким либо способом элемент.

при каждом клонировании увеличивая его на 1, и добавляя к значению атрибута элемента.
Ответить с цитированием
  #4 (permalink)  
Старый 13.07.2015, 13:54
Аватар для Leon-on12
Аспирант
Отправить личное сообщение для Leon-on12 Посмотреть профиль Найти все сообщения от Leon-on12
 
Регистрация: 07.04.2015
Сообщений: 65

Прежде всего можно попробовать переписать функцию клонирования. Что бы она добавляла цифру в id при клонировании.
А тот цикт который ты просишь довольно прост:

<body>
  <div id="ma1"></div>
  <div id="ma1"></div>
  <div id="ma2"></div>
  <div id="ma3"></div>
  <div id="ma4"></div>
  <div id="ma4"></div>
  <div id="ma5"></div>
  <div id="ma7"></div>

</body>


var elem=document.getElementsByTagName("div")
var i = 0;
for (i = 0;i<elem.length;i++){
  elem[i].id="chek"+i;
}
Ответить с цитированием
  #5 (permalink)  
Старый 13.07.2015, 17:07
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Сообщение от Leon-on12 Посмотреть сообщение
Прежде всего можно попробовать переписать функцию клонирования. Что бы она добавляла цифру в id при клонировании.
А тот цикт который ты просишь довольно прост:

<body>
  <div id="ma1"></div>
  <div id="ma1"></div>
  <div id="ma2"></div>
  <div id="ma3"></div>
  <div id="ma4"></div>
  <div id="ma4"></div>
  <div id="ma5"></div>
  <div id="ma7"></div>

</body>


var elem=document.getElementsByTagName("div")
var i = 0;
for (i = 0;i<elem.length;i++){
  elem[i].id="chek"+i;
}
Леон. Весь день в голове крутилась та же мысль!
Прокрутить по name и назначить id в цикле!!!
СПАСИБО!

Просто потом надо будет при пометке чекбокса скрывать или показывать этот элемент. И у него должно быть уникальное значение.

Нет, все же JS -это класс, хотя я больше в php работаю.
Ответить с цитированием
  #6 (permalink)  
Старый 13.07.2015, 17:08
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Функция клонирования - не моя.
Она отлично работает. Ее не хотелось бы трогать.

Если что, вот эти функции клонирования и удаления строк:Н
<script type="text/javascript">
//Удаление строки
function droptr(btn){
  if(document.getElementById) {
          tr = btn;
          while (tr.tagName != 'TR') tr = tr.parentNode;
          tr.parentNode.removeChild(tr);
          checkForLast();
  }
}
//Добавление строки
function addtr(btn){
  if(document.getElementById) {
          tr = btn;
          while (tr.tagName != 'TR') tr = tr.parentNode;
          var idSuffix = Math.round(Math.random()*1000);
          var newTr = tr.parentNode.insertBefore(tr.cloneNode(true),tr.nextSibling);
          thisChilds = newTr.getElementsByTagName('td');
          checkForLast();
    }
  }
}
//Активация/дезактивация кнопки минус ( - )
//Неактивна, когда строка строка одна или нет ни одной добавленной строки
function checkForLast(){
  btns = document.getElementsByName('drop');
  for (i = 0; i < btns.length; i++){
          btns[i].disabled = (btns.length == 1) ? true : false;
  }
}
</script>

Надо ли изменять эти функции или просто в них добавить вышеуказанный цикл?

Последний раз редактировалось Эдди, 13.07.2015 в 17:14.
Ответить с цитированием
  #7 (permalink)  
Старый 13.07.2015, 19:41
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

Вам id вообще не нужны.

Пользователь выбирает и показывает _что_ скопировать (равно удалить, редактировать).

Выбрал - скопировали - осталось выбранное - можно редактировать. Все просто.

Ну то есть после копирования надо лишь перенести фокус на копию чтоб она осталась активной.
Ответить с цитированием
  #8 (permalink)  
Старый 14.07.2015, 08:20
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Сообщение от kostyanet Посмотреть сообщение
Вам id вообще не нужны.

Пользователь выбирает и показывает _что_ скопировать (равно удалить, редактировать).

Выбрал - скопировали - осталось выбранное - можно редактировать. Все просто.

Ну то есть после копирования надо лишь перенести фокус на копию чтоб она осталась активной.
У меня случай посложнее.
Пользователь копирует строку. А в строке помимо прочего есть еще и чекбоксы. Это форма.
Так вот необходимо, чтобы в скрипт передавались не только помеченные чекбоксы, а еще и непомеченные, для чего до чекбокса стоит Hidden с таким же названием и value=0. И при пометке чекбокса надо сделать этот hidden style="display=none".
В общем там все сложно.
Перебор id по getElementsByTagName мне подходит.
Ответить с цитированием
  #9 (permalink)  
Старый 14.07.2015, 08:23
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А если начать с этого - Пользователь копирует строку. - цель?
Ответить с цитированием
  #10 (permalink)  
Старый 14.07.2015, 08:38
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от Эдди
В общем там все сложно.
Это не сложно, а дофига. Куча песка - не сложна, а просто там дофига песчинок, а вот здание состоящее в сущности из песка разной природы и фракций - сложное.

Если вам для веры нужен id, то значит нужен. А вообще он там в упор не нужен, ибо есть пользователь и значит интерфейс попросту интерактивный.

Элемент копируется (клонируется) со всем своим барахлом - с хиденами и протча - как два пальца об асфальт.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сменить название класса у всех элементов AlexJ Events/DOM/Window 4 23.05.2012 09:33
Как изменить свойство css у всех элементов одного класса AlexJ Events/DOM/Window 7 19.03.2011 06:25
Как изменить background всех дочерних элементов внутри <div>? libinstyle Общие вопросы Javascript 2 24.03.2010 13:25
как записать id всех элементов в массив? SunYang Общие вопросы Javascript 21 06.02.2010 22:50
Как снять фокус со всех элементов? Logo Общие вопросы Javascript 7 02.07.2009 23:53