Avatar billede theboy Nybegynder
28. april 2003 - 22:24 Der er 23 kommentarer og
1 løsning

Flytte værdier mellem 2 <select> bokse

Er der nogen der kan give mig et eksempel på hvordan et javascript, kan flytte kopiere værdier fra en boks til en anden.

Jeg har en javascript der kan flytte værdier mellem fx <select multiple name="select1" size='8' style="width:200px">

og

<select multiple name="select2" size='8' style="width:200px">

men det skulle også gerne fungere mellem
<select multiple name="select1[]" size='8' style="width:200px">

<select multiple name="select2[]" size='8' style="width:200px">

Er der nogen der kan hjælpe?

Her er den kode jeg har nu:
-------
function deleteOption(object,index) {
    object.options[index] = null;
}

function addOption(object,text,value) {
    var defaultSelected = true;
    var selected = true;
    var optionName = new Option(text, value, defaultSelected, selected)
    object.options[object.length] = optionName;
}

function copySelected(fromObject,toObject) {
    for (var i=0, l=fromObject.options.length;i<l;i++) {
        if (fromObject.options[i].selected)
            addOption(toObject,fromObject.options[i].text,fromObject.options[i].value);
    }
    for (var i=fromObject.options.length-1;i>-1;i--) {
        if (fromObject.options[i].selected)
            deleteOption(fromObject,i);
    }
}

<input name="button2" type='button' style="width:70px;" onclick="copySelected(this.form.select2,this.form.select1)" value='< Tilføj' />
Avatar billede =maddog= Nybegynder
28. april 2003 - 22:45 #1
du kan kun bruge alphanumeriske tegn i name attributten.
Avatar billede theboy Nybegynder
28. april 2003 - 22:47 #2
Hvordan?
Giv et eksempel tak
Avatar billede =maddog= Nybegynder
28. april 2003 - 22:56 #3
name="select1[]" er en ulovlig værdi.
Du kan se her
http://www.w3.org/TR/html401/types.html#type-cdata
hvilke værdier der er lovlige for name og id attributten
Avatar billede theboy Nybegynder
28. april 2003 - 23:40 #4
På adressen: http://www.html.dk/scripts/javascript/00006/
Fungere det nu godt nok. Jeg ville gerne lave det samme. Det skal bare være et PHP dokument der skal hente værdierne, frem for ASP, som ekspeplet på http://www.html.dk/scripts/javascript/00006/eksempel.asp
viser!
Avatar billede =maddog= Nybegynder
29. april 2003 - 00:12 #5
på adressen
http://www.html.dk/scripts/javascript/00006/
bruger de jo også en lovlig name attribut (name="select1") og ikke en ulovlig name attribut (name="select1[]")
Avatar billede theboy Nybegynder
29. april 2003 - 09:26 #6
Kunne man evt. tage værdierne fra <select1> og ligge over i et <select4[]>?
Avatar billede theboy Nybegynder
29. april 2003 - 09:30 #7
Jeg har set der er muligt at tage værdierne fra en <select[]> og gemme all værdierne i en variabel, men hvordan kan man gøre det med <select> ?
Avatar billede olebole Juniormester
29. april 2003 - 16:12 #8
<ole>

=maddog= >> Brackets er tilladte som name og id. De skal blot være formateret som CDATA (hvilket altså tillader '[]'):
  http://www.w3.org/TR/html401/interact/forms.html#h-17.6

Pas på, når du læser W3C's rekommendationer: ID er i den terminologi ikke det samme som id. Det samme gælder NAME og name  ;o)

Til gengæld kan JavaScript ikke uden videre behandle brackets, så disse er en rigtig skidt ting at bruge ... uagtet de kan være smarte i PHP  :)
Man kan altid lave 'hovsa-hacks' - men det er og bliver noget skrammel.

/mvh
</bole>
Avatar billede olebole Juniormester
29. april 2003 - 16:15 #9
PS: NAME og ID er - ligesom CDATA - definitioner af tegnsæt. Der, hvor man ser, hvad der er tilladelige tegn, er ved elementets beskrivelse.
Nogle attributter skal angives med tegn fra NAME-sættet, andre fra ID - eller CDATA
Avatar billede olebole Juniormester
29. april 2003 - 16:18 #10
Løsningen i JavaScript er forøvrigt:
  onclick="copySelected(this.form.elements['select2[]'],this.form.elements['select1[]'])"

Men, det er stadig noget skrammel  :oP
/mvh
Avatar billede olebole Juniormester
29. april 2003 - 16:22 #11
=maddog= >> Du vil sagtens kunne finde spm. på E, hvor jeg argumenterer på samme måde som du.
Jeg er imidlertid blevet klogere - bl.a. efter korrespondence med W3C  ;o)
/mvh
Avatar billede olebole Juniormester
29. april 2003 - 16:35 #12
Kikker du derimod på globale elementer (ikke form-elementer, men f.eks. div og span), kan du se, at deres id _ikke_ må indeholde '[]', da disse skal formateres med NAME-sættet (det er en fejl, det står stavet med små bogstaver):
  http://www.w3.org/TR/html401/struct/global.html#adef-id
Avatar billede =maddog= Nybegynder
29. april 2003 - 16:42 #13
jamen jeg bliver klogere dag for dag. det er nu ikke kun mig der har fået den opfattelse at name skal være alphanumerisk
http://www.blooberry.com/indexdot/html/tagpages/s/select.htm
der egentlig er en meget god site siger det også.
I dette tilfælde er det virkelig problematisk i Javascript fordi man ikke kan lave en reél objekt pointer som
arr["name"] = "OleBole"; // hvor arr er et array
alert(arr.name);
arr["name[]"] = "OleBole";
alert(arr.name[]); // her får vi Syntax Error der ikke kan gribes run-time med try-catch.
Avatar billede olebole Juniormester
29. april 2003 - 16:49 #14
yups ... det har han misforstået. Men selv de rigtig gode kan misforstå det og blive korrekset *host-host*  ;oD

Dit JS-eksempel er en af grundende til, jeg skrev den sidste linie i (29/04-2003 16:18:54)  ;o)
/mvh
Avatar billede olebole Juniormester
29. april 2003 - 17:01 #15
Problemet i eksemplet er i virkeligheden, at du blander objekter og associative arrays sammen.

I de fleste tilfælde opfører et associativt array sig som et objekt i JS - men ikke altid!
Det betyder, at man som oftest kan hente et array-element ud af et associativt array, somom det var et objekt (altså med dot-notation).

I dette tilfælde skal man holde tungen lige i munden og huske, der er tale om et associativt array - og hente det med array-notation:

var arr = new Array();
arr["name"] = "OleBole"; // hvor arr er et array
alert(arr.name);
arr["name[]"] = "OleBole";
alert(arr["name[]"]);

Det er præcis det samme med et form-element. Du kan ikke hente et element med brackets i name med:
  document.FORMNAVN.bla[];
eller:
  document.FORMNAVN.elements.bla[];
Men skal bruge:
  document.FORMNAVN.elements["bla[]"];

/mvh
Avatar billede =maddog= Nybegynder
29. april 2003 - 17:27 #16
sandt nok. af en eller anden grund vælger jeg altid at traversere med pointere. Sikkert i en objekt-orienteret rus så koden kan "genbruges" med andet en et-niveau arrays. Jeg er ikke dygtig nok til javascript til ikke at kode det objekt-orienteret.

theBoy> ked af at have været dig til besvær.
Avatar billede olebole Juniormester
29. april 2003 - 17:47 #17
Det er heller ikke altid let, når JavaScript er så 'tilgivende', som det jo er. Det er ikke så smart, når typer bliver så frit fortolket ... så kommer man let til at lave fejl.
Det er noget helt andet med programmeringssprog ... de er som oftest meget mere strikse. Til gengæld er JavaScript dejlig let at komme igang med - netop fordi det er så løst  :)

=maddog= >> Jeg er glad for, du var 'til besvær'. Så fik vi nemlig en anledning til at diskutere og klarlægge nogle vigtige punkter, der meget tit bliver misforstået ... det er _altid_ velgørende  ;o)
/mvh
Avatar billede =maddog= Nybegynder
29. april 2003 - 18:00 #18
javascript er et godt sted at starte - helt bestemt. Ikke blot er det meget tilgivende som du siger, men det kan både programmeres lineært, funktions-orienteret og objekt-orienteret. På den måde kan man bevæge sig et skridt "op" uden at skifte sprog.
Javascript lider desværre af det samme kompleks som Java - nul dekonstruktor. Jeg har endnu ikke kunnet afgøre om en null værdi automatisk frigør resourcer (altså om myObject = new VeryBigDOMObject("using tons of resources"); myObject =null; faktisk frigør resourcerne), fordi man ikke programelt har adgang til en garbage collector og jeg derfor ikke kan afgøre hvilket strategi run-time kompileren anvender.

(Ups. Det blev lidt længere og dybere end tiltænkt. Ville egentlig bare have skrevet "Javascript lider desværre af det samme kompleks som Java - nul dekonstruktor."!)
Avatar billede olebole Juniormester
29. april 2003 - 18:51 #19
Hehe ....... JavaScript's garbage collection er ikke sådan at rode med. Da JS jo er et klient-sprog, er dets garbage collection desværre også browserafhængig  :oP
En nærmere diskussion af emnet vil fylde rigtig meget, så det bliver ikke her  ;o)
/mvh
Avatar billede theboy Nybegynder
29. april 2003 - 19:08 #20
Jeg siger siger mange tak for svarene og jeres debat. Jeg har nu fået det til at virke og det er jeg glad for :-)
Det hjalp med:
onclick="copySelected(this.form.elements['select2[]'],this.form.elements['select1[]'])"
Avatar billede olebole Juniormester
29. april 2003 - 19:26 #21
Så vil jeg liste et forsigtigt svar ind her  ;o)
Avatar billede =maddog= Nybegynder
29. april 2003 - 19:27 #22
OleBole> indeed. derfor men "Ups". Jeg samler materiale sammen og tager løbende noter og forsøger desuden at sætte nogle (egne) konventioner for min kode. Når bægeret er fuldt laver jeg sikert et mega 200pts spørgsmål hvor erfaringer forhåbenligt kan udveksles.
Avatar billede =maddog= Nybegynder
29. april 2003 - 19:27 #23
derfor men "Ups" --> derfor min "Ups"
Avatar billede olebole Juniormester
29. april 2003 - 19:35 #24
theboy >> Tak for points ... det glæder mig, vi også fik løst dit oprindelige problem  ;oD

=maddog= >> Det ser jeg frem til. Det er dejligt en sjælden gang imellem at få de mere langhårede emner frem i lyset her på E  :)
/mvh
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