Полезная информация

Заказывай стафф с атрибутикой Mozilla и... пусть все вокруг завидуют тебе! Быть уникальным - быть с Mozilla!

№128-10-2009 16:18:57

Jazzy.em
Участник
 
Группа: Members
Зарегистрирован: 28-10-2009
Сообщений: 1
UA: Firefox 3.5

Некорректная работа JavaScript

Проблема следующая. Есть JS, который вызывается при событии onFocus, очищает элемент select и заполняет его новыми данными. При повторном вызове loadItems(id,name) хотелось бы сохранить предыдущий выбор пользователя (var selText) и выбрать соответствующий <option>. Однако, при очищении списка select и создании нового option с указанием для нужного атрибута "selected", когда открываешь список, выбор меняется на первый элемент. Точнее в самом выпадающем списке элемент выбирается, а в строке выбранного элемента подставляется первый элемент. Неприятный факт.

Пример немного надуманный, там заглушки вместо динамически подгружаемого массива, но для демонстрации ошибки его хватает.

Выделить код

Код:

<script language="JavaScript">
function addOption (oListbox, text, value, isDefaultSelected, isSelected)
{
  var oOption = document.createElement("option");
  oOption.appendChild(document.createTextNode(text));
  oOption.setAttribute("value", value);

  if (isDefaultSelected) oOption.defaultSelected = true;
  if (isSelected) oOption.selected = true;

  oListbox.appendChild(oOption);
}
function clearSelect(oListbox)
{
  for (var i=oListbox.options.length-1; i >= 0; i--)
  {
      oListbox.remove(i);
  }
};
function loadItems(id,name)
{

        var items=["1st","2nd","3th","4"]

        var objSel =  document.getElementById(id);
        var selText="";
        if ( objSel.selectedIndex != -1)
        {
          //Если есть выбранный элемент, запоминаем его
          selText=objSel.options[objSel.selectedIndex].text;
        }
        var flag=false;
        //objSel.options.length = 0; 
        clearSelect(objSel);
        addOption (objSel,"-- НЕТ --","-- НЕТ --",false,false);
        var i=0; 
        for (i=0; i<items.length; i++)
        {
            if (items[i]===selText) flag=true; else flag=false;
            //objSel.options[i]=new Option(result["proc"][i],result["proc"][i],flag,flag);
            addOption (objSel,items[i],items[i],flag,flag);
        }

}
</script>



<form name="myForm" action="./" method="post">
<br/>Процессор:<br/>
<select size=1 id="procId" name="proc" onFocus="javascript:loadItems('procId','proc')">
 <option>-- НЕТ --</option>
 <option>Проц1</option>
 <option>Проц2</option>
</select>
</form>

В IE8.0 и Opere 10 данной проблемы нет. Закомментаренный строки кода - тоже эффекта не дают.

p.s. Забыл сказать, для проявления эффекта необходимо, чтобы элемент select потерял фокус (щёлкнуть по свободному месту)

Отредактировано Jazzy.em (28-10-2009 16:36:52)

Отсутствует

 

№229-10-2009 00:07:45

banbot
Moderator
 
Группа: Moderators
Зарегистрирован: 23-12-2007
Сообщений: 5293

Re: Некорректная работа JavaScript

Тема перенесена из форума «Поддержка пользователей» в форум «Разработка».


Do you feel lucky, punk?

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]