25. august 2004 - 21:05Der er
26 kommentarer og 2 løsninger
Standard HTML dropdown - spring til H - A = Hansen
Jeg har en normalt standard HTML dropdown menu <select>
Jeg har rigtig mange (alfabetisk listede) valgmuligheder, og som standard kan man jo så trykke på et bogstav på tastaturet, og så springer man ned til det forbogstav i listen.
Men jeg kunne godt tænke mig at man kunne trykke på flere bogstaver, således at man sprang til første, andet, tredje osv. bogstav i ordet.
Altså hvis jeg nu trykker først på H og så på E, så vil den først gå til Hans, og så til Ebbe. Men jeg vil gerne at den ender på HElle.
Vil dette være muligt at lave med et Javascript? Er der nogen der har sådan et liggende?
Jeg kan ikke selv finde ud af Javascript endnu, så point gives for en færdig løsning.
Obs, løsningen skal fungere sammen med en standard <select> dropdown menu.
Det ville også være genialt hvis man kan skrive et navn som ikke eksisterer i forvejen, og så tilføje det direkte. Altså hvis det fungerer som en slags kombineret tekstboks/dropdown.
Faktisk ligesom adresselinien i Internet Explorer, hvor man har mulighed for at vælge adresser, hvis der findes nogen med de bogstaver man har skrevet. Men hvor man også har mulighed for at skrive en helt ny adresse.
Du kunne jo vente med at acceptere til nogen kom med en løsning på din første kommentar, jeg forestiller mig noget med at du har en knap til højre for tekstfeltet, hvor man kunne klikke hvis der ikke blev fundet nogen i selectboxen.
Det eneste der ville gøre det endnu bedre, var hvis de navne der findes i listen, automatisk blev markeret, når der ikke var andre muligheder tilbage. Men hvis man så skrev yderligere et bogstav, så skulle det være den tekstboks hvor man skriver i der bliver aktiveret.
Altså hvis man i listen har navnene: Abba, Aladin, Allan, Alma
Så vil man hvis man skriver "A" få listet alle fire navn, forsættet man med "AL" så får man listet : Aladin, Allan, Alma . Når man har skrevet "ALL" så er der kun én mulighed, nemlig Allan. Så ville det være fedt, hvis Allan blev markeret, således at man bare kunne trykke Enter/Return...istedet for at man skal klikke på ham med musen først.
Hvis man derimod skriver flere bogstaver, f.eks. Allah...så kan det ikke længere være Allan, og fokus skal derfor være på det ord jeg elv har skrevet, således at det bliver tilføjet når jeg trykker enter.
Så hvis der er nogen der kan komme med sådan en løsning, så vil det være perfekt. Ellers så går pointene til el_barto.
Puha... sad lige og havde lidt vrøvl med den første.
Fandt til sidst ud af, at det var fordi at én af de skuespillere jeg hentede fra databasen, var Anders "Anden" Matthesen... Det gav lidt knas med " omkring anden... Nå, men fik det endelig til at virke.
Så nu vil jeg prøve nummer to forslag du er kommet med :-)
Synes godt om
Slettet bruger
25. august 2004 - 23:03#8
Jeg vil anbefale dig til i databasen at ændre alle " til &" som er HTML koden for samme tegn.
Du kan nok også påregne at løbe ind i problemer med ' men her kunne løsningen være at bruge ` eller ´
Hmm.. det ser ud til at der er lidt fejl i nummer to.
Hvis jeg f.eks. taster C - Y, så kommer den rigtig nok frem og siger, at der kun er én, og om den skal markere...men den markerer "Citron" og ikke cykel.
Iøvrigt har man ikke mulighed for at skrive videre...hvis jeg f.eks. ville taste "cykelstyr"
Nå, men du er ihvertfald sikret point for den første løsning, da det løser mit problem.
Men hvis du har lyst til at arbejde videre med nummer 2, så ville det da være cool. Og hvis du bruger meget tid på det, så bare sig til, så skal jeg nok smide nogle flere point oveni.
sg = frm.ord.value.toLowerCase(); lt = new Array();
for (i = 0; i < opts.length; i++) { if (opts[i].toLowerCase().indexOf(sg) == 0) { sidste = opts[i]; nummer = lt[i]; lt[lt.length] = opts[i]; frm.liste.length = lt.length; } }
Men man kan stadig ikke skrive videre. Eller dvs. man kan skrive ét tegn mere, end det fundne ord. Så hvis jeg f.eks. skrive B-I, så finder den ordet bi, jeg kan så skrive ét bogstav mere, f.eks. L, men så får jeg ikke lov at taste mere.
sg = frm.ord.value.toLowerCase(); lt = new Array();
for (i = 0; i < opts.length; i++) { if (opts[i].toLowerCase().indexOf(sg) == 0) { sidste = opts[i]; nummer = lt[i]; lt[lt.length] = opts[i]; frm.liste.length = lt.length; } }
Hvis jeg direkte vælger fra listen med musen, så er det ok, og det rigtige ord bliver sendt.
Hvis jeg fuldt ud skriver et ord, så bliver det rigtige ord også sendt.
Den eneste problem nu, ser ud til at være, når jeg taster et par bogstaver, indtil et ord at autoselected. Nå jeg så sender, så bliver der kun sendt de bogstaver jeg selv har tastet, og ikke hele ordet.
Jeg har sidder og roddet med ovenstående, og det er sådan set fint nok - men hvad nu hvis man vil have en anden value end text? altså 1 for albatros - 2 anders etc...
Tja, burde man ikke kunne lave 2 arrays, hvor det ene indeholder navnene, og det andet indeholder values?
Faktisk ville det gøre det bedre endnu, da jeg har et unikt skuespiller ID i min database. Men hvis det ikke kan lade sig gøre, så må jeg bare søge på navnet i databasen efterfølgende.
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.