Dropdown не заполняется в IE? - PullRequest
       11

Dropdown не заполняется в IE?

3 голосов
/ 06 октября 2009

Я пытаюсь получить значения в списке выбора для подкатегорий на основе того, что выбрано в списке выбора категорий. Кажется, он не работает на IE. Кто-нибудь может подсказать проблему?

В php-файле у меня есть

<body onload="setSubcategories(default_value);">

В файле JS у меня есть что-то вроде

 subcategories = new Array();
 subcategories['Lifestyle'] = ['All',
                                  'Beauty (SHC)',
                                  'Skin Care',
                                  'Hair Care',
                                  'Oral Care',
                                  'Cosmetics',
                                  'Footwear',
                                  'Jewelry',
                                  'Male Styling',
                                  'Women Hygiene',
                                  'Womens magazines',
                                  'Apparels',
                                  ' Fashion (AFA)',
                                  'Spa',
                                  'Accessories'
                                  ];
    subcategories['Automobiles'] = ['All',
                           'Automobiles (C&B)',
                           'Cars',
                           'Bikes',
                           'Car Magazine',
                           'Bikes Magazine',
                           'Accessories'
                       ];
    subcategories['FoodandBeverage'] = ['All',
                                  'Snacking',
                                  'Confectionary',
                                  'Beverages',
                                  'Generic F&B',
                                  'Restaurant Review',
                                  'Food Reviews',
                                  'Wines & Vineyards'
                              ];


function setSubcategories(default_value){
    default_value = (typeof default_value == 'undefined') ?
             'All' : default_value;
    var elem = document.getElementById('id-category');
    if(elem == null){return false;}

    var category = elem.value;
    var subelem = document.getElementById('id-subcategory');
    var html = "";
    var subcategoriesArr = subcategories[category];
    for(var i=0; i < subcategoriesArr.length; i++){
        var selected = subcategoriesArr[i] == default_value ? " selected" : "";
        html += '<option' + selected + '>' + subcategoriesArr[i] + '</option>\n';
    }
    subelem.innerHTML = html;
}

Ответы [ 3 ]

3 голосов
/ 06 октября 2009

Попробуйте использовать эквивалент DOM:

var subcategoriesArr = subcategories[category];
for(var i=0; i < subcategoriesArr.length; i++){
    var option = document.createElement('option');
    option.value = option.text = subcategories[i];
    option.selected = (subcategoriesArr[i] == default_value);
    subelem.appendChild(option);
}
0 голосов
/ 06 октября 2009

Используйте проверенный временем метод создания Option объектов и добавления их в коллекцию options выбора:

var subcategoriesArr = subcategories[category];
var i, len, selected, optionText;

// Clear any existing options
subelem.options.length = 0;

// Create new options
for (i = 0, len = subcategoriesArr.length; i < len; i++){
  selected = (subcategoriesArr[i] === default_value);
  optionText = subcategoriesArr[i];
  subelem.options[i] = new Option(optionText, optionText, selected, selected);
}
0 голосов
/ 06 октября 2009

Я сталкивался с этой ошибкой раньше. Вы не можете установить innerHTML для выбранного элемента в Internet Explorer . Вы должны обернуть элемент select в div (или другой элемент), а затем сгенерировать разметку для нового элемента select, который включает опции, которые вы хотите вставить.

Вот небольшой псевдокод:

  1. Цель выбора
  2. Обертка выбора в элементе div
  3. Сохранить разметку select для последующего повторного использования (шаг № 5) и очистить содержимое div
  4. Создание разметки для параметров
  5. Включить эту разметку в сохраненную разметку выбора.
  6. Поместите все это в div, окружающий select

Само собой разумеется: я закончил тем, что использовал подход чистого DOM. Это позор, потому что это намного медленнее, чем использование innerHTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...