Avatar billede nelander Nybegynder
19. juli 2007 - 02:54 Der er 8 kommentarer

Autocomplete på chat (IRC-style)

Hejsa,
ja jeg har i noget tid ikke lavet noget, men er blevet bedt om at arbejde videre på et gammelt chat-projekt.

Chatten i sig selv virker fint, men jeg er stødt på et problem, da jeg blev bedt om at lave en autocomplete funktion for chatnavnene, der er online i rummet.

F.eks. at man skriver de første 3 bogstaver af et navn, trykker på tab-tasten og så den selv skriver resten. Og hvis man klikker flere gange går den videre til de næste, der matcher, hvis der er flere.

Listen over folk i rummet kan jeg både lægge som array eller i en application, der ligger som ADODB.Recordset med id="online"


Feltet, hvor der skrives:
<input type="text" name="message" size="100" maxlength="255">


Hvordan får jeg den til det?
Avatar billede olebole Juniormester
19. juli 2007 - 12:51 #1
<ole>

Det er nok mest realistisk at oprette det som en betalt opgave under kategorien 'Opgaver'  =)

/mvh
</bole>
Avatar billede nelander Nybegynder
19. juli 2007 - 20:44 #2
Tjaa... Men ved ikke helt, hvor mange penge, jeg egentlig vil give for et forholdsvis enkelt script. Ved det kan løses forholdsvist let, hvis man har kendskab til JavaScript (evt. AJAX) eller noget andet, der kan give et script, der løser opgaven :) Problemet ligger i, at få det støvet op... *Gs*

Det behøver ikke være et perfekt fejlfrit script :)

Derfor jeg har valgt ikke at oprette den som betalt opgave :)
Avatar billede olebole Juniormester
20. juli 2007 - 11:36 #3
I HTML/AJAX-sammenhæng har jeg kun set Google løse det på en brugbar måde - så 'forholdsvis let' er nok en middelsvær overdrivelse. AJAX er kanon simpelt ved første øjekast - men i virkeligheden noget af det, du kan lave i en browser, som kræver størst kunnen. Google's udviklere er stadig nogle af de ganske, ganske få, der kan  =)
Avatar billede nelander Nybegynder
20. juli 2007 - 12:18 #4
Den er jeg nu ikke helt enig i :)
Desuden var AJAX blot et forslag om, at man såmænd godt kunne bruge det til at hente navnene fra serveren ;)

Det kan også gøres via den navneliste, der allerede ligger hos brugeren og derved udelukkende vha. JavaScript clientside :)

Prøver om ikke jeg kan sparke noget sammen *S*
Avatar billede olebole Juniormester
20. juli 2007 - 16:20 #5
"Den er jeg nu ikke helt enig i" >> Så er du utvivlsomt en af de utallige, der ikke ved, hvordan AJAX bruges - og hvilke enorme problemer, der er med memory-leaks i IE ved brug af AJAX. Det er dog ikke så mærkeligt, da jeg endnu har til gode at se en brugbar AJAX-tutorial på WWW. Den allerværste og desværre mest anvendte er w3schools.com's totalt misforståede makværk  =)
Avatar billede nelander Nybegynder
20. juli 2007 - 21:30 #6
Som man tager det... Men nu ikke meningen vi skulle diskutere, hvorvidt man ville kunne bruge AJAX til det her... Det var et forslag, hvis det kunne hjælpe nogen med at hjælpe mig - ikke et oplag til en debat om AJAX ;p

Indtil videre ser mit script sådan ud, hvis nogen får lyst til at hjælpe med at bygge det videre :) (eller hvis nogen kan fortælle, hvorfor den giver fejl lige nu)

<script type="text/javascript">
<!--
function autocomplete()
{
    if (event.keyCode==18)
  {
    var sysNavneliste
    var sysTekst
    var sysSamletLinie

    sysNavneListe = document.getElementById("navneliste").value
    sysTekst = document.getElementById("message1").value

    arrTekst = sysTekst.Split(' ')
    y = arrTekst.length
    sysAutoNavn = arrTekst[y]

    arrBruger = sysNavneliste.split('<[BRAKE]>')
    arrBruger.Sort()
    var test2
      test2 = " virker"
      sysSamletLinie = sysTekst + sysAutoNavn
      document.getElementById("message1").value = sysSamletLinie
      document.chat_write.message.focus()
  }
}
-->
</script>
Avatar billede nelander Nybegynder
20. juli 2007 - 21:34 #7
skal lige sige, at sysTekst er den tekst brugeren har skrevet før vedkommende trykkede på alt-tasten...
sysNavneListe er en liste over brugere, der er online i rummet delt med <[BRAKE]>... navnene deles derefter med <[NAMEBREAK]>, da der er medsendt navn i både uCase og som det skal stå, da det også bruges i et andet script :)

sysAutoNavn skulle gerne blive til det navn, der skal udskrives efter den har fjernet, hvad der måtte være i arrTekst[y] :)
Avatar billede olebole Juniormester
21. juli 2007 - 20:56 #8
JavaScript er case sensitive:

arrTekst = sysTekst.Split(' ')
    >>
arrTekst = sysTekst.split(' ')

arrBruger = sysNavneliste.split('<[BRAKE]>')
arrBruger.Sort()
    >>
arrBruger = sysNavneListe.split('<[BRAKE]>')
arrBruger.sort()

- og det sidste led i et array findes med ARRAY[ARRAY.length-1]:
y = arrTekst.length-1

Der er en del andre ting at tage hensyn til:
1) Hvis brugeren skriver: "Bla bla blabla bla Ole B" - og trykker ALT, så bliver det svært at finde "Ole<[NAMEBREAK]>Bole".
For ikke at tale om: "Herberth <[NAMEBREAK]>Leopold <[NAMEBREAK]>Maximillian <[NAMEBREAK]>Van <[NAMEBREAK]>Den <[NAMEBREAK]>Schwandvogel <[NAMEBREAK]>III" (- mellemrummene af hensyn til E's overflow i dette tekstområde)  ;o)

2) Du forudsætter, cursoren altid står i slutningen af feltet. Er dette tilfældet? Hvis det ikke er, bliver løsnigen betydelig mere kompleks - og ikke X-browser

3) Din løsning virker i IE. Skal den være X-browser?
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