Показать сообщение отдельно
  #9 (permalink)  
Старый 18.04.2020, 01:36
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от 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>
Ответить с цитированием