Multiselect mit appendChild() erzeugen
Claus Peter
- javascript
0 wahsaga
Hallo,
folgende Seite klappt leider nicht mit IE:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>multiselect test</title>
<script language="JavaScript" type="text/javascript">
<!--
function _NodeCreateSelectH(pAnchor, pszName, iSize)
{
var pElt;
// header
pElt = document.createElement("select");
if(null != pszName) pElt.setAttribute('name', pszName);
pElt.setAttribute("multiple", true);
pElt.setAttribute("size", iSize);
pAnchor.appendChild(pElt);
return pElt;
}
function _NodeCreateSelectOpt(pAnchor, iSelected, pszValue, pszTxt)
{
var pElt;
// option
pElt = document.createElement("option");
if(iSelected) pElt.setAttribute('selected', 'selected');
pElt.setAttribute('value', pszValue);
pElt.appendChild(document.createTextNode(pszTxt));
pAnchor.appendChild(pElt);
return pElt;
}
function CreateMultiList(pAnchor)
{
var i;
// create select
while(pAnchor.firstChild)
pAnchor.removeChild(pAnchor.firstChild); // remove defs
if(null != (pSel = _NodeCreateSelectH(pAnchor, "otest", 5)) )
{
for(i=0; i<10; i++)
{
_NodeCreateSelectOpt(pSel, 1, "opt " + i, "opttext " + i);
}
}
}
function start()
{
CreateMultiList(document.all.L0.parentNode);
}
//-->
</script>
</head>
<body onLoad="start()">
<select id="L0" style="width:100%" multiple size="6" name="Test">
<option value="1" selected>def 1</option>
<option value="2">def 2</option>
<option value="3" selected>def 3</option>
<option value="4">def 4</option>
<option value="5" selected>def 5</option>
<option value="6">def 6</option>
</select>
</body>
</html>
Der IE zeigt nur 1 Zeile und selektiert nur 1 Element.
Mit Opera und Mozilla funzt es.
Ich habe schon verschiedene Varianten probiert, auch mit setTimeout(). Weiss jemand Rat?
hi,
pElt.setAttribute("multiple", true);
pElt.setAttribute("size", iSize);
Es wurde hier schon oft erwähnt, dass der IE Probleme mit setAttribute hat, wenn ein Element ein Attribut "per se" schon nach seiner Erzeugung besitzt.
Benutze dann element.attribut = wert.
pElt = document.createElement("option");
Was gefällt dir denn an der simpleren Möglichkeit, neue Elemente in eine Auswahlliste einzufügen, nicht?
gruß,
wahsaga
Hallo Wahsaga,
Benutze dann element.attribut = wert.
Habe ich schon versucht, funzt leider auch nicht
Was gefällt dir denn an der simpleren Möglichkeit, neue Elemente in eine Auswahlliste einzufügen, nicht?
Mit der Methode hat der Opera 9 totale Probleme. Die Listenelemente sind dabei willkürlich ausgewählt. Ausserdem mag Opera nicht, wenn "default selected" bei new Option() gesetzt ist.
Wahrscheinlich werde ich daher eine Brauserweiche einbauen müssen.
New Option für IE, Mozilla und andere Browser. Die Knotenmethode für Opera.
Trotzdem vielen Dank für Deine Antwort.