GlitterMedlem sedan juli 2003465 inlägg 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...
Många fel...
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.*
GlitterMedlem sedan juli 2003465 inlägg
Erik Juhlin skrev:
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...
GlitterMedlem sedan juli 2003465 inlägg 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...
Var får du undefined?
Denna förlitar sig på att value och text är detsamma. Annars kommer a och d sorteras olika.
Och varför oOption = "";?
Och vill du varken ha första eller sista i selecten?
GlitterMedlem sedan juli 2003465 inlägg undefined får jag på första posten
alla options innehåller ett värde...
a & d sorteras som det skall...
Och varför oOption = "";?
det var när det blev knas så jag plockar bort den
Peter SMedlem sedan dec. 20025 483 inlägg 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.
:)
GlitterMedlem sedan juli 2003465 inlägg
Peter S skrev:
1. options är en samling, ej en funktion, så access till medlemmarna fås genom option**[n]**
testade att skriva option[ i ] men det blev fel...
Peter S skrev:
2. I den första loopen initialiserar du a och d till och med position 1 istället för 0.
ändrade till
a[i-1] = coll.options(i).text;
d[i-1] = coll.options(i).value;
så funkade det kannon :)