Internet explorer dropdown selected probleem

Status
Niet open voor verdere reacties.

poashoas

Gebruiker
Lid geworden
31 mei 2008
Berichten
66
Hallo,

ik heb ergens een functie vandaan geplukt:

http://elmicoxcodes.blogspot.com/2007/02/innerhtml-and-select-option-in-ie.html

  1. function select_innerHTML(objeto,innerHTML){
  2. /******
  3. * select_innerHTML - corrige o bug do InnerHTML em selects no IE
  4. * Veja o problema em: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
  5. * Versão: 2.1 - 04/09/2007
  6. * Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
  7. * @objeto(tipo HTMLobject): o select a ser alterado
  8. * @innerHTML(tipo string): o novo valor do innerHTML
  9. *******/
  10. objeto.innerHTML = ""
  11. var selTemp = document.createElement("micoxselect")
  12. var opt;
  13. selTemp.id="micoxselect1"
  14. document.body.appendChild(selTemp)
  15. selTemp = document.getElementById("micoxselect1")
  16. selTemp.style.display="none"
  17. if(innerHTML.toLowerCase().indexOf("<option")<0){//se não é option eu converto
  18. innerHTML = "<option>" + innerHTML + "</option>"
  19. }
  20. innerHTML = innerHTML.toLowerCase().replace(/<option/g,"<span").replace(/<\/option/g,"</span")
  21. selTemp.innerHTML = innerHTML
  22. for(var i=0;i<selTemp.childNodes.length;i++){
  23. var spantemp = selTemp.childNodes;
    [*]
    [*] if(spantemp.tagName){
    [*] opt = document.createElement("OPTION")
    [*]
    [*] if(document.all){ //IE
    [*] objeto.add(opt)
    [*] }else{
    [*] objeto.appendChild(opt)
    [*] }
    [*]
    [*] //getting attributes
    [*] for(var j=0; j<spantemp.attributes.length ; j++){
    [*] var attrName = spantemp.attributes[j].nodeName;
    [*] var attrVal = spantemp.attributes[j].nodeValue;
    [*] if(attrVal){
    [*] try{
    [*] opt.setAttribute(attrName,attrVal);
    [*] opt.setAttributeNode(spantemp.attributes[j].cloneNode(true));
    [*] }catch(e){}
    [*] }
    [*] }
    [*] //getting styles
    [*] if(spantemp.style){
    [*] for(var y in spantemp.style){
    [*] try{opt.style[y] = spantemp.style[y];}catch(e){}
    [*] }
    [*] }
    [*] //value and text
    [*] opt.value = spantemp.getAttribute("value")
    [*] opt.text = spantemp.innerHTML
    [*] //IE
    [*] opt.selected = spantemp.getAttribute('selected');
    [*] opt.className = spantemp.className;
    [*] }
    [*] }
    [*] document.body.removeChild(selTemp)
    [*] selTemp = null
    [*]}

Werkt prima en wordt ook alleen uitgevoerd als de browser IE is.

De functie krijgt een string met options alleen wordt de option met selected="selected" niet goed verwerkt. Regel 52 en 53 zouden dat moeten verhelpen maar er mist iets...

Ik heb 2 alerts geplaatst, één met de originele tekst:
<option value=" " selected="selected">alle fabrikanten</option>

en één met de verwerkte tekst door de functie die de tekst '="selected">' mist:
<option value=" " selected>alle fabrikanten</option>

de overige options kloppen wel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan