Сообщение от laimas
|
document.forms['my-recept']['mykal\[\]'].value
|
Зачем тут экранирование? Разве квадратные скобки — специальные символы в строке?
alert("mykal\[\]" === "mykal[]"); // true
Сообщение от laimas
|
Для множества элементов так не получится.
|
Почему?
Сообщение от https://www.w3.org/TR/html53/sec-forms.html#the-form-element
|
interface HTMLFormElement : HTMLElement {
/* в частности объявлено также... */
[SameObject] readonly attribute HTMLFormControlsCollection elements;
getter Element (unsigned long index);
getter (RadioNodeList or Element) (DOMString name);
};
[...]
form[name]
Returns the form control (or, if there are several, a RadioNodeList of the form controls) in the form with the given ID or name (excluding image buttons for historical reasons); or, if there are none, returns the img element with the given ID. [...] If there are multiple matching items, then a RadioNodeList object containing all those elements is returned.
|
Сообщение от voraa
|
А зачем такое имя name="mykal[]"?
|
Сообщение от ureech
|
А такое имя нужно,когда нужны несколько одинаковых полей.
|
Вы можете называть как угодно, в случае, когда будет только одно поле, document.forms['my-recept']['mykal'] возвратит один элемент формы (класс Element). В случае, когда полей несколько — будет возвращён список элементов формы (класс RadioNodeList)
Сообщение от ureech
|
Нет,так не работает
|
Сообщение от laimas
|
Для множества элементов так не получится.
|
Если вы хотите обращаться к элементам так — document.forms["my-recept"]["mykal"], то вам следует обработать оба из возможных возвращаемых вариантов... Но вам
рекомендую не использовать такое обращение!
<form action="#" name="my-recept">
<input class="form-control" name="mykal">
<input class="form-control" name="mykal">
</form>
<script>
const ref = document.forms["my-recept"]["mykal"];
switch(true) {
case ref instanceof RadioNodeList:
for(const element of ref) {
element.value = "5";
}
break;
case ref instanceof Element:
ref.value = "5";
break;
}
</script>
Я вам рекомендую использовать document.querySelectorAll, тогда у вас будет одинаковая обработка отсутствия элемента, одного элемента и множества элементов...
<form action="#" name="my-recept">
<input class="form-control" name="mykal">
<input class="form-control" name="mykal">
</form>
<script>
for(const element of document.querySelectorAll("form[name='my-recept'] [name='mykal']")) {
element.value = "5";
}
</script>