Используя объект document form, как вы ссылаетесь на элемент формы, который сгруппирован по имени в массив?

#javascript #html

#javascript #HTML

Вопрос:

У меня есть форма с некоторыми входными данными, которые сгруппированы в массив по их имени:

 <form name="myForm">
    <input type="text" name="sibling[0][name]" />
    <input type="text" name="sibling[0][dob]" />

    <input type="text" name="sibling[1][name]" />
    <input type="text" name="sibling[1][dob]" />
</form>
  

Я пытаюсь использовать javascript для доступа к элементу по имени. Как бы я к нему обратился? Я пробовал такие вещи, как:

js:

 var formEl = document.myForm.elements[sibling][0][name]; //not correct
var formEl = document.myForm.elements.sibling[0][name]; //not correct 
var formEl = document.myForm.sibling[0][name]; //not correct 
  

Пожалуйста, помогите.

Ответ №1:

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

 var formEl = document.myForm['sibling[0][name]']; 
  

jsFiddle.

Комментарии:

1. Сначала я думал, что это использует какой-то eval … (видел ответы перед вопросом) : P

Ответ №2:

Предполагая, что это должен быть HTML, это недопустимые имена. Например, из w3 html4:

 ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
  

Конечно, это не означает, что он не будет работать в каком-либо браузере.

Я бы посоветовал вам присвоить им идентификаторы по некоторому соглашению, затем использовать document.getElementById() или document.getElementsByTagName().

Ответ №3:

Это работает:

 document.getElementsByName("sibling[1][name]")[0]
  

Комментарии:

1. document.getElementsByName(имя) возвращает массив элементов, которые соответствуют этому имени. Добавление [0] ссылается на первый элемент, и если вы не используете одно и то же имя для разных элементов, вы знаете, что желаемый элемент будет первым элементом возвращаемого массива.