Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Изменение параметра name у всех input. (https://javascript.ru/forum/jquery/45167-izmenenie-parametra-name-u-vsekh-input.html)

xTODx 17.02.2014 16:55

Изменение параметра name у всех input.
 
Всем привет.
И так, стоит задача, поменять у всех элементов input, в элементе с id #edit параметр name.
В принципе как сделать что бы брать только input понятно, и ясно.
просто взять #edit input
но как менять параметр name???
$("#edit li input").each(function(i){
		names = $(this).attr(name)
			alert(names);
			names.replace(/[^a-z]/g, '')
			$(this).attr(name, names+parseInt(i+1));

	});

<ul id = 'edit'>
    <li>
      <input type = 'text' name = 'name'>
    </li>
 <li>
      <input type = 'text' name = 'name'>
    </li>
</ul>

В результате должный выйти инпуты с именами name1 и name2

рони 17.02.2014 17:00

xTODx,
4 строка что делает? по вашему и parseInt он необходим?

xTODx 17.02.2014 17:09

4 строка убирает цифры с name.
parseInt не нужно?? тут проблемка в том, что alert
undifiend показывает.

xTODx 17.02.2014 17:11

по идее вообще понял, что нужно
$("#edit")each(function(i){

но как тогда до input достучаться ?

рони 17.02.2014 17:21

Цитата:

Сообщение от xTODx
4 строка убирает цифры с класса.

причём тут класс? -- 4 строка у вас пока бесполезна -- подумайте почему -- это вам очень пригодится.
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>

<body>
<ul id = 'edit'>
    <li>
      <input type = 'text' name = 'name'>
    </li>
 <li>
      <input type = 'text' name = 'name'>
    </li>
</ul>
<script>
  $("#edit li input").each(function(i){
	    var names = $(this).attr('name');
			$(this).attr('name', names+(++i));
           alert($(this).attr('name'))
	});

</script>
</body>

</html>

xTODx 17.02.2014 17:28

Цитата:

Сообщение от рони (Сообщение 298055)
причём тут класс? -- 4 строка у вас пока бесполезна -- подумайте почему -- это вам очень пригодится.

ой. исправился)) не с класса.
Ну да, я написал name='name'. но это набросал что бы сюда написать.
А если так было бы
<ul id = 'edit'>
    <li>
      <input type = 'text' name = 'name3'>
    </li>
 <li>
      <input type = 'text' name = 'name2'>
    </li>
<li>
      <input type = 'text' name = 'name5'>
    </li>
</ul>

xTODx 17.02.2014 17:31

$("#edit li input").each(function(i){
	    var names = $(this).attr('name');
		names = names.replace(/[^a-z]/g, '')

			$(this).attr('name', names+(++i));
           alert($(this).attr('name'))
	});

Спасибо, вот так всё работает)) а names = то не заметил, что не поставил(

xTODx 17.02.2014 17:33

и да, спасибо вам огромное)) писал раньше в теме про sortable, там вы тоже помогли, собственно туда это и делал я...)) нумеровал...)

рони 17.02.2014 17:37

Цитата:

Сообщение от xTODx
names = names.replace(/[^a-z]/g, '')

ок!:)

xTODx 17.02.2014 17:40

как видите, так вот решил это всё сделать. с нумеровкой в сортировке, с интервалом в пару секунд будет обновлять номера))
И в одно поле буду выводить отдельно в скрытую форму n, что бы там показало последний номер.
Потом в цикле php, буду $_POST проверять в цикле, как раз то количество раз, которое указано в скрытой форме n) разумно?

danik.js 17.02.2014 17:40

xTODx, а нафига все эти пляски? Нафиг менять name?
Я почему-то уверен что этого делать не нужно, и все решается проще.

danik.js 17.02.2014 17:43

Цитата:

Сообщение от xTODx
разумно?

Это слово тут точно не уместно))
А зачем каждые n секунд менять номера? И зачем в $_POST что-то проверять в цикле? Если не в курсе, то в $_POST можно передать поля ввиде массива, это такая фишка php-шная(не только) :)
<input name="name[]">
<input name="name[]">

var_dump($_POST);

xTODx 17.02.2014 21:57

та понятно что каждые n секунд не буду обновлять номера, только когда действие произошло какое то, временно поставил просто.
По поводу name="name[]" это спасибо.
правда всё-равно в цикле foreach нужно работать будет, буду отправлять в базу данных, с каждого)))
Только скорее всего будет
name="1['name']"
и т.д.)) потому что нужно по будет брать массив $_POST[1], 2 и т.д.
и каждая ячейка будет ещё иметь параметры name и т.д.

p.s: функцию нумерации вызываю при наведении на кнопку, которая при нажатии передаёт данные в php

danik.js 17.02.2014 22:04

Так че в итоге, избавился от ручной нумерации name'ов?

xTODx 17.02.2014 22:53

нет, всё на много важнее. у меня дрегбатлом и сортаблом, перетаскиваю нужные элементы в поле, они сортируются, в них есть некие параметры, которые либо каждому блоку изначально свои заданы, а некоторые меняются юзером, потом выбраные сохраняются)

xTODx 18.02.2014 10:48

function sorta(){
 $("#sortable li").each(function(i){
	 numb = (++i);
	 	$(this).find("input").each(function(){
			var names = $(this).attr('name');
		names = names.replace(/[^a-z]/g, '');
		names = names.replace(']', '');
		names = names.replace('[', '');
			$(this).attr('name', numb+'['+names+']');
			});
	});
 }

Вот конечный код) нумерует все input в #sortable li одним номером, в следующем таком #sortable li, следующим номером

danik.js 18.02.2014 12:29

То есть на странице порядок самих инпутов остается неизменным. "Сортируются" просто их имена, верно?

xTODx 18.02.2014 16:27

ну тот который мы поставили первым, и будет первым, переставим его на второе место, будет вторым)

danik.js 18.02.2014 16:32

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

xTODx 18.02.2014 22:38

в каждом элементе сортабл, есть поля с одним и тем же name. как я с $_POST вызову $_POST['name']??? )

danik.js 19.02.2014 08:45

Цитата:

Сообщение от xTODx
есть поля с одним и тем же name

Я ведь уже говорил: переименуй name в name[]
В итоге у тебя в $_POST['name'] будет массив!

xTODx 21.02.2014 11:17

я понял, именно этим я и пользуюсь только вот не name[] а 1['name']

danik.js 21.02.2014 11:37

Цитата:

Сообщение от xTODx
вот не name[] а 1['name']

А ще за единица? Нумерация чтоль? Разве не от нумерации пытаемся избавиться, дабы не делать лишние телодвижения при сортировке?

xTODx 21.02.2014 23:00

ну обьясню так, из первого блока, должен составиться запрос, потом со второго, и так далее...
соответственно это $_POST['1'] а в нём уже будут поля лежать name и т.д.

danik.js 21.02.2014 23:10

А я бы сделал так:
<form action="" method="post">
	<fieldset>
		<input type="text" name="names[]">
		<input type="text" name="names2[]">
	</fieldset>
	<fieldset>
		<input type="text" name="names[]">
		<input type="text" name="names2[]">
	</fieldset>
</form>


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


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