Avatar billede buzz Nybegynder
24. november 2002 - 17:31 Der er 3 kommentarer og
1 løsning

Bruger sortering i listbox

Hej Alle,

Jeg har fundet et script på javascript.com som jeg prøver at ændre. Scriptet laver en listbox men en række titler item-A... item-B... item-C osv. denne liste har brugeren så mulighed for at ændre rækkefølgen på, ved at markerer en title og trykke op/ned.

Når man så trykker submit sendes den nye sorteringsrækkefølge vha. URL'en.

Nu til spørgsmålet:
-------------------
Jeg skal lave scriptet om, således at der vises titler i listboxen men i stedet for at sende titlen i URL’en skal jeg sende et id som er tilknyttet titlen. Jeg har forsøgt at anvende value til mit id, men det ser ud til at value værdien bruges til at holde styr på rækkefølgen.

Hvis nogen kan hjælpe mig bliver jeg glad, jeg har prøvet alt muligt uden held.
/Buzz


Script:
-------

<HEAD>

<SCRIPT LANGUAGE="JavaScript">

<!-- Begin
function move(index,to) {
var id = document.form.id;
var total = id.options.length-1;
if (index == -1) return false;
if (to == +1 && index == total) return false;
if (to == -1 && index == 0) return false;
var items = new Array;
var values = new Array;
for (i = total; i >= 0; i--) {
items[i] = id.options[i].text;
values[i] = id.options[i].value;
}
for (i = total; i >= 0; i--) {
if (index == i) {
id.options[i + to] = new Option(items[i],values[i + to], 0, 1);
id.options[i] = new Option(items[i + to], values[i]);
i--;
}
else {
id.options[i] = new Option(items[i], values[i]);
  }
}
id.focus();
}
function submitForm() {
var id = document.form.id;
var theid = "?";
// start with a "?" to make it look like a real query-string
for (i = 0; i <= id.options.length-1; i++) {
theid += "id" + id.options[i].value + "=" + id.options[i].text;
// a "&" only BETWEEN the items, so not at the end
if (i != id.options.length-1) theid += "&";
}
location.href = document.form.action + theid;
}
//  End -->
</script>

</HEAD>


<BODY>

<form method="GET" action="" name="form">
<table>
<tr>
<td align="middle">
<select name="id" size="10" style="width: 300px;">
<option value="1">item-A</option>
<option value="2">item-B</option>
<option value="3">item-C</option>
<option value="4">item-D</option>
<option value="5">item-E</option>
<option value="6">item-F</option>
<option value="7">item-G</option>
<option value="8">item-H</option>
</select><br><br>

<input type="button" value="submit" onClick="submitForm()">
</td>
<td valign="top">
<input type="button" value="Op"
onClick="move(this.form.id.selectedIndex,-1)"><br><br>
<input type="button" value="Ned"
onClick="move(this.form.id.selectedIndex,+1)">
</td>

</tr>
</table>
</form>
Avatar billede Slettet bruger
24. november 2002 - 17:44 #1
Hvis i hele scriptet skal skrives om, ser jeg dette som den nemmeste løsning (det virker da):

<SCRIPT LANGUAGE="JavaScript">

txts = new Array("item-A", "item-B", "item-C", "item-D", "item-E", "item-F", "item-G", "item-H"); //Teksten til de forskellige options
vals = new Array("nr1", "nr2", "nr3", "nr4", "nr5", "nr6", "nr7", "nr8"); //De tilhørende values, i samme rækkefølge!

<!-- Begin
function move(index,to) {
var id = document.form.id;
var total = id.options.length-1;
if (index == -1) return false;
if (to == +1 && index == total) return false;
if (to == -1 && index == 0) return false;
var items = new Array;
var values = new Array;
for (i = total; i >= 0; i--) {
items[i] = id.options[i].text;
values[i] = id.options[i].value;
}
for (i = total; i >= 0; i--) {
if (index == i) {
id.options[i + to] = new Option(items[i],values[i + to], 0, 1);
id.options[i] = new Option(items[i + to], values[i]);
i--;
}
else {
id.options[i] = new Option(items[i], values[i]);
  }
}
id.focus();
}
function submitForm() {
var id = document.form.id;
var theid = "?";
// start with a "?" to make it look like a real query-string
for (i = 0; i <= id.options.length-1; i++) {
for (n = 0; n < txts.length; n++) {
if (txts[n] == id.options[i].text) {
temp = vals[n];
break;
}
}
theid += "id" + id.options[i].value + "=" + temp;
// a "&" only BETWEEN the items, so not at the end
if (i != id.options.length-1) theid += "&";
}
location.href = document.form.action + theid;
}
//  End -->
</script>
Avatar billede buzz Nybegynder
24. november 2002 - 17:55 #2
Hej phoenixv,

Det er sørgme en smart løsning, problemet er bare at antallet at titler ikke altid er det samme. Men kan det ikke løses ved at lave en løkke af en eller anden art? Jeg er ikke den store JavaScript mester endnu så hvis du kan hjælpe er der point.

/Buzz
Avatar billede Slettet bruger
24. november 2002 - 17:56 #3
Du kan sagtens udvide de to arrays, så længe at antallet af options i select-boksen er lig med antallet af poster i hver af de to arrays.
Avatar billede buzz Nybegynder
24. november 2002 - 18:02 #4
Yeps.... 10 øren er faldet som det hedder, nu er jeg med. Tak for hjælpen

/Buzz
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester