HTML-форма ввела массив элемента имени тега с JavaScript

Это - два вопроса о части. Кто-то ответил на подобный вопрос на днях (который также содержал информацию об этом типе массива в PHP), но я не могу найти его.

1.) Прежде всего, какова корректная терминология для массива, созданного на конце элемента имени входного тега в форме?

<form>

    <input name="p_id[]" value="0"/>
    <input name="p_id[]" value="1"/>
    <input name="p_id[]" value="2"/>

</form>

2.) Как я получаю информацию от того массива с JavaScript? А именно, я прямо сейчас просто желаю считать элементы массива. Вот то, что я сделал, но это не работает.

function form_check(){
    for(var i = 0; i < count(document.form.p_id[]); i++){  //Error on this line

        if (document.form.p_name[i].value == ''){
            window.alert('Name Message');
            document.form.p_name[i].focus();
            break;
        }

        else{
            if (document.form.p_price[i].value == ''){
                window.alert('Price Message');
                document.form.p_price[i].focus();
                break;
            }

            else{
                update_confirmation();
            }
        }
    }
}
21
задан Facundo Casco 5 May 2012 в 18:40
поделиться

4 ответа

1.) Во-первых, какова правильная терминология для массива, созданного на конце элемента name тега input в форме?

"Oftimes Confusing PHPism"

Что касается JavaScript, то куча элементов управления формы с одинаковым именем - это просто куча элементов управления формы с одинаковым именем, а элементы управления формы с именами, включающими квадратные скобки - это просто элементы управления формы с именами, включающими квадратные скобки.

Соглашение PHP об именовании элементов управления формами с одинаковыми именами иногда полезно (когда у вас есть несколько групп элементов управления, и вы можете сделать что-то вроде этого:

<input name="name[1]">
<input name="email[1]">
<input name="sex[1]" type="radio" value="m">
<input name="sex[1]" type="radio" value="f">

<input name="name[2]">
<input name="email[2]">
<input name="sex[2]" type="radio" value="m">
<input name="sex[2]" type="radio" value="f">

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

2.) Как получить информацию из этого массива с помощью JavaScript?

Это по-прежнему просто вопрос получения свойства с тем же именем, что и элемент управления формы, из элементов. Хитрость заключается в том, что поскольку имя элемента управления формы включает квадратные скобки, вы не можете использовать точечную нотацию и должны использовать нотацию квадратных скобок, как и любое другое имя свойства JavaScript, включающее специальные символы.

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

var myForm = document.forms.id_of_form;
var myControls = myForm.elements['p_id[]'];
for (var i = 0; i < myControls.length; i++) {
    var aControl = myControls[i];
}
42
ответ дан 29 November 2019 в 06:51
поделиться

Попробуйте это примерно так:

var p_ids = document.forms[0].elements["p_id[]"];
alert(p_ids.length);
for (var i = 0, len = p_ids.length; i < len; i++) {
  alert(p_ids[i].value);
}
9
ответ дан 29 November 2019 в 06:51
поделиться

document.form.p_id.length ... not count().

Вам действительно следует присвоить вашей форме идентификатор

<form id="myform">

Затем ссылаться на нее, используя:

var theForm = document.getElementById("myform");

Затем ссылаться на элементы, например:

for(var i = 0; i < theForm.p_id.length; i++){
4
ответ дан 29 November 2019 в 06:51
поделиться

Чтобы ответить на ваши вопросы по порядку:
1) Для этого нет специального названия. Это просто несколько элементов с одинаковым именем (а в данном случае еще и типом). Имя не уникально, поэтому и был придуман id (он должен быть уникальным).
2)

function getElementsByTagAndName(tag, name) {
    //you could pass in the starting element which would make this faster
    var elem = document.getElementsByTagName(tag);  
    var arr = new Array();
    var i = 0;
    var iarr = 0;
    var att;
    for(; i < elem.length; i++) {
        att = elem[i].getAttribute("name");
        if(att == name) {
            arr[iarr] = elem[i];
            iarr++;
        }
    }
    return arr;
}
2
ответ дан 29 November 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: