Açılır IE nüfuslu almıyor?

3 Cevap php

Ben kategorileri seçme listesinde seçilir ne dayanarak alt kategoriler için bir seçme listesine değerlerini almak için çalışıyorum. IE üzerinde çalışmak için görünmüyor. Herkes sorunu önerebilirsiniz?

Ben php dosyasında

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

Js dosyasında şöyle bir şey var

 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 Cevap

DOM eşdeğeri kullanmayı deneyin:

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);
}

Option nesneler oluşturma ve seçme en options toplama bunları ekleyerek zaman onur yöntemini kullanın:

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);
}

Ben daha önce bu hata karşılaştı. Sen Internet Explorer seçkin bir öğe üzerinde innerHTML ayarlanamaz. Sen bir div (veya başka bir element) olarak seçme elemanı sarın ve ardından eklemek istediğiniz seçenekleri içeren yeni bir seçme elemanı için biçimlendirme oluşturmak zorunda.

Burada küçük bir pseudo-kod:

  1. Select hedefleyin
  2. Bir div öğesi seçme sarın
  3. (Adım # 5) sonra yeniden kullanmak için select biçimlendirme saklamak ve div içeriğini temizlemek
  4. Seçenekleri için biçimlendirme oluşturmak
  5. Depolanan seçme biçimlendirme bu biçimlendirme eklemek
  6. Select çevreleyen div içinde her şeyi koymak

Söylemeye gerek yok: o innerHTML kullanmaktan çok daha yavaş olduğundan ben, bir utanç saf DOM yaklaşımı .. kullanarak sona erdi.