Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Получить массив объектов по имени (https://javascript.ru/forum/jquery/50108-poluchit-massiv-obektov-po-imeni.html)

ShutTap 12.09.2014 13:06

Получить массив объектов по имени
 
здравствуйте.
в jquery новичек - мягко сказано.
есть форма с таблицей с полями. из строки в строку поля повторяются, и имена заданы name[] . при отправки формы запускается скрипт, которые перебирает все name[] и сохраняет.
так же есть добавление нового поля, при нажатии на кнопку в эту таблицу заносятся значения из другой формы, так же расположенной на этой странице.
Возникла необходимость добавить еще одно поле, которое при добавлении данных из второй таблицы высчитывается на основе данных из первой.
В данном случае, при добавлении данных из второй таблицы в первую должны просмотреться все name[] из первой и в новую строку занести значение наибольшего значения name[] + 1.
потом первая таблица с новыми строками сохраняется в БД, но с этим проблем нет.
Вопрос в том, как получить массив значений элементов name[] для последующих манипуляций... пробовал по-всякому, читая в интернете, но как-то не очень мне понятно... прошу прощения за столь простой вопрос

MallSerg 12.09.2014 13:26

Зачем столько букв ?
написал бы просто - "сделайте мне как надо"
естественно никакого кода приводить не нужно по тому что тебе так проще помочь

ShutTap 12.09.2014 13:33

допустим,
<form>
<table>
<tr>
<td><input type="text" name="field1[]" value=""></td>
<td><input type="text" name="field2[]" value=""></td>
<td><input type="text" name="field3[]" value=""></td>
</tr>
<tr>
<td><input type="text" name="field1[]" value=""></td>
<td><input type="text" name="field2[]" value=""></td>
<td><input type="text" name="field3[]" value=""></td>
</tr>
<tr>
<td><input type="text" name="field1[]" value=""></td>
<td><input type="text" name="field2[]" value=""></td>
<td><input type="text" name="field3[]" value=""></td>
</tr>
</table>
</form>


как получить значения в виде массива для имен field1[], field2[], field3[] ?

пробовал (как понял из инета) так:
var field1 = $("field1[]");
allert (field1[3].value);

но естественно не работает у меня) как правильно?

tsigel 12.09.2014 13:39

http://jquery.page2page.ru/index.php...83%D1%82%D0%B0
var fields = $("[name^='field']");

И вообще всякие скобки не надо в имена пихать

ShutTap 12.09.2014 14:03

Так понимаю это общий массив для всех сразу field1[], field2[], field3[] ?
я имел в виду по отдельности для каждого field1[], field2[], field3[]
И на счет скобочек - даже если в имени они есть, в jq их не надо писать? просто скобочки были в коде, боюсь их убирать, да и много где они там))

далее значения получать как обычно, вроде fields[3].value ?

tsigel 12.09.2014 14:35

не value, а val(), это же jQuery.
Поизучайте
Вот что вас интересует:
https://api.monosnap.com/image/downl...QFOQeFU45SoQTj

ksa 12.09.2014 15:03

Цитата:

Сообщение от ShutTap
Так понимаю это общий массив для всех сразу field1[], field2[], field3[] ?
я имел в виду по отдельности для каждого field1[], field2[], field3[]

var a1=document.getElementsByName('field1[]');
var a2=document.getElementsByName('field1[]');
var a3=document.getElementsByName('field1[]');

Цитата:

Сообщение от ShutTap
далее значения получать как обычно, вроде fields[3].value ?

Нет...
var a=document.getElementsByName('field1[]');
alert(a[0].value);

trikadin 12.09.2014 15:35

ksa, переименовать забыл? Думаю, скорее так.

var a1=document.getElementsByName('field1[]');
var a2=document.getElementsByName('field2[]');
var a3=document.getElementsByName('field3[]');


<form>
<table>
<tr>
<td><input type="text" name="field1" value="1"></td>
<td><input type="text" name="field2" value="2"></td>
<td><input type="text" name="field3" value="3"></td>
</tr>
<tr>
<td><input type="text" name="field1" value="4"></td>
<td><input type="text" name="field2" value="5"></td>
<td><input type="text" name="field3" value="6"></td>
</tr>
<tr>
<td><input type="text" name="field1" value="7"></td>
<td><input type="text" name="field2" value="8"></td>
<td><input type="text" name="field3" value="9"></td>
</tr>
</table>
</form>

<script>
var a1=document.getElementsByName('field1');
var a2=document.getElementsByName('field2');
var a3=document.getElementsByName('field3');
alert(a1[0].value);
alert(a2[1].value);
alert(a3[2].value);
</script>

ksa 12.09.2014 15:41

Цитата:

Сообщение от trikadin
переименовать забыл?

Ага... :cray:

ShutTap 12.09.2014 16:55

что-то не получается...
у меня 12 одинаковых полей name="field[]"
var num_tmp = $("[name='field[]]");

alert(num_tmp[10].val());

скрипт просто не выполняется...
пробовал и $("[name='field[]]") и $("[name='field]") и $("field[]") и $("field") ...

tsigel 12.09.2014 17:07

:stop:
Я ссылку кидал, вы читали?

Вы знаете что такое массив? Читали что возвращают эти методы jQuery и как ими пользоваться?
:-/

trikadin 13.09.2014 00:50

ShutTap, судя по вашему сообщению, вы ну совсем не знаете javascript.

Освойте основы языка и вопрос отпадет сам, полностью или частично.
А с чем не справитесь - поможем.

На сайте javascript можно начать изучать с учебника, раздел Основы javascript.
Возможно, вам также понадобится HTML - учебник есть, например, здесь: http://htmlbook.ru/samhtml
По CSS -- здесь: http://htmlbook.ru/samcss

Задавайте конкретные вопросы по ходу дела.

ShutTap 15.09.2014 08:38

ага, совсем не знаю. просто в одном месте потребовалось изменить, до этого не сталкивался особо в принципе...

ShutTap 16.09.2014 11:01

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

tsigel 16.09.2014 11:04

ShutTap,
Делайте простые тестовые примеры, может сами разберетесь пока будете делать. Нет - так на примерах и поможем. (примеры которые можно запустить [HTML run], [JS run])

ShutTap 16.09.2014 12:45

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

upd работает, спасибо всем :)
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<div id="text">&nbsp;</div>
<table id="table">
<tr>
<td><input type="text" value="1" name="field[]"></td>
</tr>
<tr>
<td><input type="text" value="" name="field[]" placeholder="введите значение"></td>
</tr>
<tr>
<td><input type="text" value="5" name="field[]"></td>
</tr>
</table>

<input type="button" onClick="addvalue();" value="try">
<script>
function addvalue(){

var num = 0;
var num_tmp;
var num_vals = "Выставленные значения: ";

$("input[name=field\\[\\]]").each( function(i,elem) {

num_tmp = parseInt($(elem).val(), 10);

if (num_tmp>num){num=num_tmp;}

num_vals+=num_tmp+", ";
}
);

$("#text").html(num_vals);

$("#table").append("<tr><td><input type='text' value='"+(num+1)+"' name='field[]'></td></tr>");

}
</script>

tsigel 16.09.2014 12:48

ShutTap,
Ну для начала jQuery подключите

ShutTap 16.09.2014 12:55

а, ахах, на сайте-то подключено.... :) подключил

tsigel 16.09.2014 12:59

ShutTap,
Следующее замечание что вы не приведите к числовому типу ($(elem).val() - возвращает строку)
parseInt($(elem).val(), 10)

ShutTap 16.09.2014 13:10

добавил

tsigel 16.09.2014 13:16

ShutTap,
Цитата:

num_tmp>num

Вы сравниваете число и "undefined", сделайте вначале
var num = 0;

BETEPAH 16.09.2014 13:19

19я строка
var num = 0;


p.s. опередили :)

ShutTap 16.09.2014 13:28

Да, работает)
Сделал так же на сайте - не работает, буду разбираться, что там не так) теперь хотя бы есть рабочий пример того, как надо.
Большое спасибо)

tsigel 16.09.2014 13:35

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

ShutTap 16.09.2014 13:45

нашел, вместо $("input[name=field\\[\\]]") там надо было писать jQuery("input[name=field\\[\\]]")
спасибо больсчусчее всем за помощь :)


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