как обратиться к полю, если оно массив

usascha

Новичок
как обратиться к полю, если оно массив

Всем привет. есть следующий код:

PHP:
<select class="quest_sel" name="theme_num" onChange='javascript:
if(this.form.theme_num.selectedIndex >-1) {
	var t="";
	for (var i=this.form.theme_num.selectedIndex;i<this.form.theme_num.options.length;i++) {
		if (this.form.theme_num.options[i].selected) t += this.form.theme_num.options[i].value + "\n";
	}
	this.form.theme_num_sel.value = t;
}
	this.form.theme_num.value=this.this[selectedIndex].value;' dir="ltr" lang="ru" multiple>
...
</select>
Такой вариант отлично работает. НО проблема в том, что name должно быть theme_num[], т.е. в скрипт мне надо передать массив значений, а если поставить скобки, то этот скрипт перестаёт работать.
 

dimagolov

Новичок
вместо this.form.theme_num[].options ставьте this.form['theme_num[]'].options
но правильнее прописывать уникальные id (не обязательно совпадают с name) и обращаться в JS через document.getElementById
и не надо писать так скрипт в свойствах, сделайте ф-ю и назначайте ее обработчиком.
 

usascha

Новичок
спасибо. сейчас приделаю.
Но у меня функция уже не выполняется на первом if.
как обратиться к полю на первой строке?
 

usascha

Новичок
как я это понимаю, да. А как на самом деле не знаю. В js я ещё меньше понимаю чем в php.

но вообще, я уже дотумкал. Вот что получилось:
PHP:
<select class="quest_sel" name="theme_num[]" onChange='javascript:
alert("1");
if(this.form["theme_num[]"].selectedIndex >-1) {
alert("2");
	var t=""; 
	for (var i=this.form["theme_num[]"].options.selectedIndex;i<this.form["theme_num[]"].options.length;i++) {
alert("3");
		if (this.form["theme_num[]"].options[i].selected) t += this.form["theme_num[]"].options[i].value + "\n";
alert("4");
	}
alert("5");
	this.form.theme_num_sel.value = t;
}
	this.form.theme_num.value=this.this[selectedIndex].value;' dir="ltr" lang="ru" multiple>

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

У меня сейчас будут id у каждого <option>, которые мне надо сложить как слагаемые. Как это сделать?
 

dimagolov

Новичок
dark-demon, спорный вопрос. если JS много, то без ID ну никак не обойдешься.

2 usascha
в JS this. это текущий контекст. В обработчике события визуального элемента он будет указывать на сам элемент.
 

usascha

Новичок
это я догадался, сейчас с этим мучаюсь в отдельной функции.

Ну как же быть со сложением значений id?
 

dimagolov

Новичок
можно свойства любые в общем придумывать, главное не переопределить что-то важное.

не понял что за сложение id. или имеется в виду сложение неких свойств перечня элементов? так перебрать (по вкусу, типа document.getElementById('myId' + i).MyProperty ) и пользовать как удобно
 

usascha

Новичок
задача следующая:
выбранные значения этого выпадающего меню имеют некий особенный id. Мне их надо сложить и вывести в поле, которое сейчас назначается строкой:

this.form.theme_num_sel.value = t;
 

dark-demon

d(^-^)b
"некий особенный id" - это что такое? и почему это надо складывать?

dimagolov, независимо от количества JS количество ID надо минимизировать.
 

usascha

Новичок
выпадающее меню составляет перечень тем для теста.
В значении value каждого пункта этого меню стоит номер темы, который передаётся php-скрипту для формирования собственно самого теста.
А на текущей странице мне надо вывести без её перезагрузки максимальное количество вопросов, имеющихся в базе по выбранным темам.
Поэтому чтобы правильно сформировать тест, надо посчитать общее количество вопросов. Сделать это можно сложив все значения. Поскольку value занято, я использую id.
 

dark-demon

d(^-^)b
бугога :) id малость не для этого...
используй какое-нибудь другое имя аттрибута.
 

usascha

Новичок
они все не для этого.
не вижу препятствий чтобы использовать id. Его не ищет ни один броузер. Этот параметр исключительно для программирования.

Подскажите как сложить значения!
 

usascha

Новичок
я пользуюсь для поиска решений на js сайтом irt.org.

по Вашим ссылкам тоже походил, но решения нет.
Помогите сложить!

Код:
function count_max() {
	alert("1");
	if(document.create["theme_num[]"].selectedIndex >-1) {
		alert("2");
		var t=""; 
		alert("3");
		for (var i=document.create["theme_num[]"].options.selectedIndex; i<document.create["theme_num[]"].options.length;i++) {
			alert("4");
			if (document.create["theme_num[]"].options[i].selected) {
				t += document.create["theme_num[]"].options[i].value + " ";
			}
			alert("5");
		}
//		document.create.theme_num_sel.value = t;
			document.create.theme_num_sel.value += t + ' ';
		alert("6");
	}
	document.create["theme_num[]"].value = document.create.theme_num[selectedIndex].value;
	alert("7");
}
такой код даёт возможность вывести значения value рядом одно за другим. Как их сложить?
 
Сверху