Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > тарбл с <SELECT>


Автор: Jlekc 18.6.2005, 02:08
хых, койта трабл с ИЕ

вообщем есть Выпадающий Список
Код

<SELECT id="sel"></SELECT>

формируеться скриптом, например так:
Код

<script language="javascript">
target = document.getElementById("sel");;
for(var i=0; i<10; i++){
    if(i != 5)
        target.options[i] = new Option(i, i, false, false);
    else
        target.options[i] = new Option(i, i, false, true);
}
</SCRIPT>

по коду видно что на '5' елемент будет выставлен дефолтовый фокус.
Что NN и FFox успешно делают.

а вот ИЕ ставит фокус на '4'

мона кнешна добавить проверки на ИЕ, и выставлять для нее фокус на '6'. тада она станит на '5'.
Но это бред. Мож кто что посоветует?

ЗЫ: зарания благодарен

Автор: Ciber SLasH 18.6.2005, 02:43
Добавляй опции так:
Код

target.options.add(new Option(i, i, false, false))

Автор: Jlekc 18.6.2005, 02:58
options - зделаный на основе класса с индексаторами,
мона через его интерфейс, мона через индексы

а разница?
есе ИЕ все равно ставит фокус на '4'

Автор: Ciber SLasH 18.6.2005, 03:07
Вот:
Код

target = document.getElementById("sel");;
for(var i=0; i<10; i++)
  target.options[i] = new Option(i, i, false, false);
target[5].selected = true

так даже быстрее, т.к. не надо проверять с каждым разом if (i == 5).

Автор: Black 18.6.2005, 03:14
Код

for(var i=0; i<10; i++){
    if(i!=5) { alert(i); }
    else { }
}


не выводит 5 и FireFox и IE

Не пойму в чем глюк, то.. вроде работает.

Автор: Ciber SLasH 18.6.2005, 03:33
Цитата(PHP @ 18.6.2005, 04:14)
Не пойму в чем глюк

Я так понял, что при создании OPTION-ов, IE устанавливает свойство selected в true первому элементу OPTION в списке, и при дальнейшем динамическом создании OPTION-ов это свойство не меняет, даже если указываешь true в новом элементе.

Поэтому надо после создания OPTION-ов устанавливать свойство selected самостоятельно (см. мой пред. пост).

Автор: Jlekc 18.6.2005, 23:37
Цитата(Ciber @ 18.6.2005, 03:33)
при дальнейшем динамическом создании OPTION-ов это свойство не меняет

хмм, но он всеже выставляет, и указывает Селекь на 4

ЗЫ: 2Ciber SLasH, не понял в чем юмор, но твой сорс вроде пашет, псиба

Автор: Ciber SLasH 19.6.2005, 03:12
Цитата(Jlekc @ 19.6.2005, 00:37)
не понял в чем юмор, но твой сорс вроде пашет

Всё предельно просто smile
Сначала просто создали OPTION-ы без установки "фокуса"
Код

for(var i=0; i<10; i++)
  target.options[i] = new Option(i, i, false, false);

потом просто "выбрали текущим" OPTION с индексом 5 из нашего SELECT-а:
Код

target.options[5].selected = true;


Ха, а вот это какой-то фокус:
Код

target[5].selected = true;

я ведь сначала ошибся написав так... оказывается элемент SELECT является коллекцией, который содержит опции, что означает можно обратиться напрямую target[index]. Хм, не знал... вот к чему приводят маленькие недочёты... smile

Автор: Jlekc 19.6.2005, 13:43
Цитата(Ciber @ 19.6.2005, 03:12)
Всё предельно просто

это то я понял,
я не понял почему в моем первоначальном примере ИЕ неправильно выставлял


Цитата(Ciber @ 19.6.2005, 03:12)
Ха, а вот это какой-то фокус:

хмм, чот у меня этот фокус не работает(и есе чесно не должен)


Цитата(Ciber @ 19.6.2005, 03:12)
оказывается элемент SELECT является коллекцией

ЗЫ: кстати в Сишки создавать индексаторы не проблема
Код

public int this[int index]{
    set{
    }
    get{
        return something;
    }
}
а мона ткое проделать в JS, чес не представляю эту конструкцию

Автор: Sardar 21.6.2005, 21:19
Цитата(Jlekc @ 19.6.2005, 12:43)
ЗЫ: кстати в Сишки создавать индексаторы не проблема

В JS Мозиллы кстати тоже smile Жаль что никто геттеров/сеттеров больше не поддерживает. Даже старую нетскейповскую идею с watch/unwatch.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)