Jag försöker sortera i en select men det funkar inte riktigt som jag vill...
borde inte detta funka?
<script language="jscript">
function Sort(){
var a, b, c, d, l;
var coll = sel;
a = new Array;
c = new Array;
d = new Array;
if (coll.length > 0) {
for (i = 1; i < coll.length; i++){
a[i] = coll.options(i).text;
d[i] = coll.options(i).value;
coll.options.remove(i);
}
}
b = a.sort();
for (i=0; i<b.length; i++){
var oOption = document.createElement("OPTION");
oOption.innertext = d[i];
oOption.value = b[i];
coll.options.add(oOption);
}
}
</script>
det som händer är att den tar bort några poster på selecten och lägger till poster utan namn och med värde...
någon som vet varför?
jag får inget felmess...
Du börjar på 1 när du går igenom selecten. 0 är ju första indexet. Och bort med if-satsen. Helt onödig och ger en ful kod.
Du börjar ta bort ur select-listan, men indexen ändras ju medans du flyttar om, därför blir det fel där. Börja bakifrån istället.
Sen så använder du dig av d *vilket är fel eftersom att d inte har blivit sorterad och därför stämmer inte d:s index överens med b:s.
Och sen så använder du d för innertext när du lägger in det samtidigt som du tog d från value när du hämtade ut det.
Och varför innertext och inte bara text?
Sen är jag inte säker vad som gäller om paranteser vs hakparanteser när man fixar med options. Kanske är IE som är snäll eller så är det korrekt. Men standard är ju i alla fall att man kör med hakparanteser.
Men jobba på med det. Jag tror det är helt rätt att köra med inbyggda sort funktionen.*
Du börjar på 1 när du går igenom selecten. 0 är ju första indexet.
jag vill inte ha med första posten på selecten..
Erik Juhlin skrev:
Sen så använder du dig av d vilket är fel eftersom att d inte har blivit sorterad och därför stämmer inte d:s index överens med b:s.
hur skall man få dem att stämma överens då?
för det går la inte att skapa en 2D array och sortera den?
Erik Juhlin skrev:
Och sen så använder du d för innertext när du lägger in det samtidigt som du tog d från value när du hämtade ut det.
Och varför innertext och inte bara text?
Innertext är la value?
hittade insättningen på msdn så det skall la vara rätt...
function Sort(){
var a, d, i;
var coll = sel;
a = new Array
d = new Array
for (i = coll.length-2; i >= 1; i--){
a[i] = coll.options(i).text;
d[i] = coll.options(i).value;
coll.options.remove(i);
}
a.sort();
d.sort();
for (i = 0; i < a.length; i++){
var oOption = document.createElement("OPTION");
oOption.text = a[i];
oOption.value = d[i];
coll.options.add(oOption);
oOption = "";
}
}
denna funkar bra förutom att jag får en "undefined" fattar inte varför...
1. options är en samling, ej en funktion, så access till medlemmarna fås genom option**[n]**
2. I den första loopen initialiserar du a och d till och med position 1 istället för 0.
3. remove() är ingen funktion som appliceras på en samling objekt. Den hör till select-elementet.
4. Samma gäller för add(); det är en medlemsfunktion för select-elementet. Dessutom tar den två in-parametrar: ett option-element som skall läggas till samt det option-element det skall läggas till efter.