Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.10.2008, 13:10
SARD
 
Сообщений: n/a

option шире select'a + выбор данных
Дано: форма с ограничением по ширине.
Чтобы можно было без проблем пользоваться select'ами, использован вот этот хак:
http://www.hedgerwow.com/360/dhtml/u...th/bk/demo.php
Все работает.

НО: используется еще скрипт автоподстановки данных (javascript: кликаешь на кнопку - она автоматом подставляет данные в форму, в том числе выбирает нужный option в select'е).
Код:

<script language="JavaScript" src="/includes/dropdown_menu_hack.js"></script> 
<script type="text/javascript"> 
function InsCtn(Params){ 
    var response = Params.split("|"); 
    document.getElementById("City"+response[0]).options[response[1]].selected=true 
    } 
</script>


И в странице:
<select name="City1" id="City1" style="width: 100; behavior:expression(window.dropdown_menu_hack!=null?window.dropdown_menu_hack(this):0);"> 
    <option value="1">Город1 
    <option value="2">Город2 
    <option value="3">Город3 
... 
    <option value="n">ГородN 
</select> 
 
<input type="button" name="NewAddContacts1" value="Вставить данные в select" style="width:70" onClick="InsCtn('1|3')">


При клике на button в select'e должен выбираться город3.
Так вот, в ИЕ все это художество не работает.
А в Опере и ФФ - без проблем.

Так как с JavaScript'ом я слаб, прошу помощи.
Либо помогите решить проблему с ИЕ, либо посоветуйте другой способ раздвинуть option'ы, не меняя ширины select'a. И чтобы можно было вышеуказанным скриптом подставлять значения.

Последний раз редактировалось Андрей Параничев, 29.10.2008 в 13:58. Причина: Пользуйтесь bb-кодами [js] и [html] для оформления листингов кода в теле сообщения
Ответить с цитированием
  #2 (permalink)  
Старый 30.10.2008, 14:19
Аспирант
Отправить личное сообщение для EugenyK Посмотреть профиль Найти все сообщения от EugenyK
 
Регистрация: 17.03.2008
Сообщений: 64

>> При клике на button в select'e должен выбираться город3.

Да ладно!
У "Город3" опция имеет индекс 2, он никак не может быть выбран. Ни в FF, ни в Опере ни в IE. Во всех браузерах скрипт работает нормально. Но лучше BOM не использовать, а использовать DOM (при выставлении checked вроде глюков нет, а вот при изменении|добавлении опций могут быть проблемы)
Ответить с цитированием
  #3 (permalink)  
Старый 30.10.2008, 15:14
SARD
 
Сообщений: n/a

Прошу прощения, наврал в коде, когда его упрощал для форума.
Действительно, Город3 не выберется. Выберется Город4.

А скрипт и правда работает 0_о
Ничего не понимаю...
Правда, теперь постоянная неопознанная ошибка вылетает. Буду искать.
Ответить с цитированием
  #4 (permalink)  
Старый 30.10.2008, 16:09
SARD
 
Сообщений: n/a

Я вообще ничего не понимаю.
Два компа: настольный/Win2003/IE6 и ноут/XP/IE6. Лежит все на ноуте, на нем же поднята веб-служба (не знаю, надо ли это, но тем не менее).

Пробую на настольном. При загрузке страницы выскакивает "Неопределенная ошибка". Подстановка значений работает.

На ноуте при загрузке - тишина, но при попытке подставить значения - ошибка "document.getElementById(...).options(...) - есть null или не является объектом".


Убейте меня...
Кстати, я в первом посте писал "с JavaScript'ом я слаб", потому прошу пояснить - как сделать не BOM, а DOM. Изменение и добавление option'ов мне не нужно - только selected.
Ответить с цитированием
  #5 (permalink)  
Старый 30.10.2008, 17:07
SARD
 
Сообщений: n/a

Еще одно наблюдение.

На ноуте все, как описано выше.
На настольном если все закрыть, а потом зайти на страницу - ошибка, как на ноуте. F5 - ошибка, как описано выше про настольный.
Ответить с цитированием
  #6 (permalink)  
Старый 30.10.2008, 19:18
Аспирант
Отправить личное сообщение для EugenyK Посмотреть профиль Найти все сообщения от EugenyK
 
Регистрация: 17.03.2008
Сообщений: 64

SARD,
таг <option> надо закрывать </option>'ом
function InsCtn(Params){
	var response = Params.split("|");
	var cN = document.getElementById('City'+response[0]).childNodes
	var l = cN.length
	for( var i=0; i<l; i++){
		if( !!cN[i].selected ) cN[i].selected = false
	}
	cN[response[1]].selected = true
}
Ответить с цитированием
  #7 (permalink)  
Старый 30.10.2008, 20:17
SARD
 
Сообщений: n/a

Закрыл option'ы. Толку ноль.
Вставил код вместо своего. На ноуте-ХР-IE6 заргужается без ошибок, на настольном-2003-IE6 ругается на неопределенную ошибку.
При попытке клацнуть на кнопку (везде) - ругается "Объект не поддерживает это свойство или метод" на строку, в которой "cN[response[1]].selected = true".

*здесь_должен_быть_бьющийся _башкой_об_стену_смайл*
Ответить с цитированием
  #8 (permalink)  
Старый 30.10.2008, 20:33
Аспирант
Отправить личное сообщение для EugenyK Посмотреть профиль Найти все сообщения от EugenyK
 
Регистрация: 17.03.2008
Сообщений: 64

Мой огород можно существенно упростить
function InsCtn(Params){
		    var response = Params.split("|");
		    document.getElementById('City'+response[0]).selectedIndex = response[1]
}
Ответить с цитированием
  #9 (permalink)  
Старый 30.10.2008, 20:50
SARD
 
Сообщений: n/a

Все равно не работает.

На ноуте-ХР-IE6 заргужается без ошибок, на настольном-2003-IE6 ругается на неопределенную ошибку.

При клике на кнопку:

на ноуте приключается белый пустой select, после F5 в нем встает не то (почему-то) значение, после еще одного F5 - первый option.

на настольном - выбирается нужный option, после любого количества F5 он же и остается выбранным.
Ответить с цитированием
  #10 (permalink)  
Старый 31.10.2008, 15:47
DOSER
 
Сообщений: n/a

мОЖНО И подругому:
<script type="text/javascript"> 
function InsCtn()
{ 
var valuer=3; // Задание value 
City1.value = valuer;
} 
</script>



И в странице:


<select name="City1" id="City1" style="width: 100; behavior:expression(window.dropdown_menu_hack!=null?window.dropdown_menu_hack(this):0);"> > 
    <option value="1">Город1 
    <option value="2">Город2
    <option value="3">Город3
    <option value="4">Город4
    <option value="5">Город5
</select> 
 
<input type="button" style="width:200;  name="NewAddContacts1" value="Вставить данные в select" style="width:70" onClick="InsCtn();">

Последний раз редактировалось Андрей Параничев, 03.11.2008 в 19:06. Причина: Пользуйтесь bb-кодами [js] и [html] для оформления листингов кода в теле сообщения
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск