Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Динамическая HTML форма (FireFox - работает, IE - не работает) (https://javascript.ru/forum/misc/3015-dinamicheskaya-html-forma-firefox-rabotaet-ie-ne-rabotaet.html)

dm1tr1y 09.03.2009 23:23

Динамическая HTML форма (FireFox - работает, IE - не работает)
 
Здравствуйте,

подскажите, пожалуйста, в чем ошибка?
Скрипт работает в FireFox, но не работает в IE.

Исходный код:
<script type="text/JavaScript">

//Функция работает в обоих браузерах
function add_item()
	{
	opt = document.getElementById("st_list");
	opt2 = document.getElementById("ed_list");
	num_s = opt.options.selectedIndex;
	m_id = opt.options[num_s].value;
	if (opt.options.selectedIndex!= -1)
		{
		var len_d = opt2.options.length;
		opt2.options[len_d] = new Option(opt.options[num_s].text, opt.options[num_s].value);
		opt.removeChild(opt.options[num_s]);
		}
	}

//Функция работает в обоих браузерах
function del_item()
	{
	opt = document.getElementById("ed_list");
	opt2 = document.getElementById("st_list");
	num_s = opt.options.selectedIndex;
	m_id = opt.options[num_s].value;
	if (opt.options.selectedIndex!= -1)
		{
		var len_d = opt2.options.length;
		opt2.options[len_d] = new Option(opt.options[num_s].text, opt.options[num_s].value);
		opt.removeChild(opt.options[num_s]);
		}
	}

//Функция НЕ работает в обоих браузерах
function add_all_item()
	{
	opt = document.getElementById("st_list");
	opt2 = document.getElementById("ed_list");
	var size = opt.options.length;
	for (var i=0; i<size; i++)
		{
		var o = new Option(opt.options[0].text, opt.options[0].value);
		opt2.appendChild(o);
		opt.removeChild(opt.options[0]);
		}
	}

//Функция НЕ работает в обоих браузерах
function del_all_item()
	{
	opt = document.getElementById("ed_list");
	opt2 = document.getElementById("st_list");
	var size = opt.options.length;
	for (var i=0; i<size; i++)
		{
		var o = new Option(opt.options[0].text, opt.options[0].value);
		opt2.appendChild(o);
		opt.removeChild(opt.options[0]);
		}
	}

//Функция НЕ работает в обоих браузерах
function add_num_item()
	{
	opt = document.getElementById("st_list");
	opt2 = document.getElementById("ed_list");
	var num = document.Form.add_num.value;
	for (var i=0; i<num; i++)
		{
		var o = new Option(opt.options[0].text, opt.options[0].value);
		opt2.appendChild(o);
		opt.removeChild(opt.options[0]);
		}
	}

//Функция НЕ работает в обоих браузерах
function del_num_item()
	{
	opt = document.getElementById("ed_list");
	opt2 = document.getElementById("st_list");
	var num = document.Form.del_num.value;
	for (var i=0; i<num; i++)
		{
		var o = new Option(opt.options[0].text, opt.options[0].value);
		opt2.appendChild(o);
		opt.removeChild(opt.options[0]);
		}
	}
</script>

<form name='Form' action='' method='post'>
<table border='1' cellpadding='0' cellspacing='0'>
<tr align=center>
	<td align='center'>
		<select name='st_list' id='st_list' size='9' class='FormSize' ondblclick='add_item();'>
		<option value='1'>111</option>
		<option value='2'>222</option>
		<option value='3'>333</option>
		<option value='4'>444</option>
		</select>
	</td>
	<td align='center'>
		<input name='add_num' type='text' size='1'>
		<input name='add' class='ButtonSize1' value='&gt;' type='button' onclick='add_num_item();'><br>
		<input name='add' class='ButtonSize2' value='&gt;' type='button' onclick='add_item();'><br>
		<input name='add' class='ButtonSize2' value='&gt;&gt;' type='button' onclick='add_all_item();'><br>
		<input name='del' class='ButtonSize2' value='&lt;&lt;' type='button' onclick='del_all_item();'><br>
		<input name='del' class='ButtonSize2' value='&lt;' type='button' onclick='del_item();'><br>
		<input name='del' class='ButtonSize1' value='&lt;' type='button' onclick='del_num_item();'>
		<input name='del_num' type='text' size='1'>
	</td>
	<td align='center'>
		<select name='list[]' id='ed_list' size='9' class='FormSize' ondblclick='del_item();'>
		</select>
	</td>
</tr>
</table>
</form>

Zibba 10.03.2009 06:34

Ну еще бы
opt.options[0].text
А счетчик цикла тогда зачем? (i) . Копайте в этом направлении.

dm1tr1y 10.03.2009 12:43

Счетчик цикла тут потому, что я N раз обрабатываю нулевой элемент.
Это сделано затем, что без этого - получается динамически изменяемый массив.
Ну, грубо говоря, если у меня надо обработать 4 элемента (0, 1, 2, 3), то после нескольких итераций количество элементов изменится и, например, на второй итерации, элемент имевший первоначальный номер 3 будет уже 1м. И обработать элемент массива 3 - уже не получится.

Zibba 10.03.2009 12:59

Посмотерл,
opt2.appendChild(o);
не хочет работать в IE :/ попробуйте делать так:
opt2.options[opt2.options.length] = new Option(opt.options[0].text, opt.options[0].value);
(это для добавления всех из списка пробовал), у меня заработало. Для остальных сделаете по аналогии.

dm1tr1y 10.03.2009 13:20

О! Большое спасибо!!
Работает, спасибо!

dm1tr1y 14.03.2009 22:20

А вот крайне интересно, если результат выбора опций (вот этот):
<select name='list[]' id='ed_list' size='9' class='FormSize' ondblclick='del_item();'>
</select>


Я передаю методом POST на другую страницу, в PHP обработчик, то как принять результат?
$_POST['list[]'];
- не работает.. Да и вряд ли заработало бы..

Zibba 14.03.2009 22:39

А смысл давать select'у имя с угловыми скобками? Чем Вас другие символы не удовлетворяют!?
P.S. Я конечно не знаю, но единственное что могу посоветовать это попробовать экранировать символы ] и [

Gvozd 14.03.2009 22:51

dm1tr1y,
в случае такой формы в ПХП надо принимать посредством конструкции $_POST['list'][0];
кажется так

dm1tr1y 14.03.2009 23:00

Так. От части понял что не так.
echo $_POST['list'][0]; - выдаст первый символ того элемента, на котором стоял курсор до момента нажатия кнопки передачи данных в PHP.

echo $_POST['list']; - выводит VALUE значение выделенного элемента OPTION.

Но это как то уж очень фигово, мне то надо обрабатывать все элементы SELECT, а не только выделенный.. :(

dm1tr1y 14.03.2009 23:15

Резюме проблемы.

Вот есть у меня SELECT, куда я динамически помещено несколько элементов OPTION.
Как их получать и обрабатывать - я знаю.

Но вот как их корректно передать, без выделения каждого OPTION вручную??


Часовой пояс GMT +3, время: 07:56.