Это - два вопроса о части. Кто-то ответил на подобный вопрос на днях (который также содержал информацию об этом типе массива в 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();
}
}
}
}
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];
}
Попробуйте это примерно так:
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);
}
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++){
Чтобы ответить на ваши вопросы по порядку:
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; }