Selection dynamisch anlegen funktioniert im IE nicht

Biergamasda

Erfahrenes Mitglied
Nun, komischerweise bekomme ich bei folgendem Script im IE kein Resultat

währ toll wenn mir jemand sagen könnte was dem IE (6) daran nicht gefällt :D

Javascript:
var selection = document.createElement("form");
            selection.appendChild(document.createElement('select'));
            selection.firstChild.setAttribute('type','select');
            selection.firstChild.setAttribute('class','fileSelect');
            selection.firstChild.setAttribute('size','15');
            for (var i = 0; i < FileNames.length; i++) {
                var option = document.createElement('option');
                option.setAttribute('value',FileNames[i]);
                text = FileNames[i].substring(0,FileNames[i].lastIndexOf('.'));
                option.appendChild(document.createTextNode(text));
                selection.firstChild.appendChild(option);
            }
            document.getElementById('files').appendChild(selection);


Desweiteren würde ich gerne fragen, ob es möglich ist, diese Auswahl etwas "anzupassen"

1. scrollbar weg bzw ändern
2. den Text in den option Elementen vertikal Zentrieren (mit line-height und vertical-align funktioniert es nicht)


Tausend Dank für eure hoffentlich baldigen Antworten :d

lg Masda
 
habs mal so probiert, hat aber nichts geändert, dann hab ich gelesen, dass der IE mit setAttribute Probleme macht, und das dann umgeändert (mit *.className und *.size)

Das Problem jetzt ist komischerweise, dass size im FF fehlerfrei funktioniert, nur im IE mal wieder nicht, es zeigt einfach keine Auswirkungen,gibt in der IE JS Konsole aber auch keine Fehlermeldung

hoffe du hast da ne Idee ;)

lg Masda
 
Hi,

ich habe bei mir festgestellt, dass im IE die size-Angabe nicht immer akzeptiert wird. So wird sie z.B.
in einer Funktion ignoriert, die im Body-Tag über den onload-Event aufgerufen wird. Wird die gleiche
Funktion jedoch über
Code:
window.onload = funktionsName;
aufgerufen, erfolgt eine korrekte Anzeige.

Was Du versuchen kannst, ist die Angabe des kompletten Select-Tags mit size-Attribut beim Erstellen des neuen
Elements (createElement).

Code:
function __newForm(){
  var selection = document.createElement("form");
  // Select für IE erstellen
  if(document.all && !window.opera){
    var objSelect = document.createElement("<select name='selTest' size='15'></select>");
  }else{
    var objSelect = document.createElement("select");
    objSelect.setAttribute("type","select");
    objSelect.setAttribute("size","15");
  }
  objSelect.className = "fileSelect";

  for (var i = 0; i < FileNames.length; i++) {
    var strText = FileNames[i].substring(0,FileNames[i].lastIndexOf('.'));
    var objOption = new Option(FileNames[i], strText, false, false);
    objSelect.options[objSelect.length] = objOption;
    var option = document.createElement('option');
  }
  objSelect.selectedIndex = 0;

  selection.appendChild(objSelect);
  document.getElementById('files').appendChild(selection);
}
Vielleicht hilft Dir das weiter.

Ciao
Quaese
 
Diese Zeile
Javascript:
var objSelect = document.createElement("<select name='selTest' size='15'></select>");

funktioniert bei mir komischerweise im Ie nicht, jedenfalls laut IE Fehlerkonsole kann er damit nichts anfangen

Und, das mit window.onload funktioniert nicht, da ich in späterer folge das ganze ins Dokument einfügen will, da das Dokument noch nicht existiert, gibts es einen Fehler.

Ich könnte höchstens ein paar millisekunden warten bevor ich da ganze hinzufüge
 
Hi,

folgendes Konstrukt funktioniert bei mir im IE (Versionen 5.01, 5.5 und 6) unter Win XP Home Edition.
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>www.tutorials.de</title>

<script type="text/javascript">
  <!--
var FileNames = new Array();
for(var i=0; i<20; i++){
	FileNames[i] = i+".jpg";
}

function _newForm(){
  var objForm = document.createElement("form");

  // Select für IE erstellen
  if(document.all && !window.opera){
    var objSelect = document.createElement("<select name='selTest' size='15'></select>");
  }else{
    var objSelect = document.createElement("select");
    objSelect.setAttribute("type","select");
    objSelect.setAttribute("size","15");
  }
  objSelect.className = "fileSelect";

  objForm.appendChild(objSelect);
  document.getElementById('files').appendChild(objForm);

  for (var i = 0; i < FileNames.length; i++) {
    var strText = FileNames[i].substring(0,FileNames[i].lastIndexOf('.'));
    var objOption = new Option(FileNames[i], strText, false, false);
    objSelect.options[objSelect.length] = objOption;
  }
  objSelect.selectedIndex = 0;
}
 //-->
</script>
</head>
<body>
<button onclick="_newForm();">Neues Formular</button>
<div id="files"></div>
</body>
</html>
Ciao
Quaese
 
Ok, das anlegen funktioniert jetzt. Nur, jetzt stellt sich mir ein neues Problem...

Ich schildere es mal hier :)

Also, ich bekomm per Ajax ein XML File zurück, dieses lese ich dann aus und erstell mir ein Array. Im FF funktionierts, im IE leider nicht.

Hab hier im Forum schon 2 Threads zu diesem Thema gefunden, jedoch wurde in keinem dieser Threads eine funktionsfähige alternative bzw Methode geschildert.

Javascript:
var files = http_request.responseXML.getElementsByTagName('file');
                    var FileNames = new Array();
                    for (var i = 0; i < files.length; i++) {
                        FileNames[i] = files[i].firstChild.data;;
                    }

desweiteren funktioniert ein auf die options angewandter Stylesheet nicht, aufruf:
CSS:
select.fileSelect {
        width: 100%;
        border: 0;
        overflow: hidden;
    }
    select.fileSelect option {
        height: 20px;
    }

Wieder einmal funktionierts im FF wie geplant, im IE tut sich überhaupt nichts (bezieht sich nur aufs option, die hauptklasse funktioniert)

Ich hoffe ihr könnt mir da nochn bissl weiterhelfen :D

vielen Dank und schlaft gut ;)

Masda
 
Hi,

wie sieht denn Dein XML-Dokument aus?

Erhält der IE überhaupt Daten zurück? Kannst Du z.B mit
Code:
alert(http_request.responseText);
überprüfen.

Ciao
Quaese
 

Neue Beiträge

Zurück