ugrás a tartalomhoz

Javascript...

ark · 2007. Nov. 1. (Cs), 17.26
Sziasztok!

Nos nem is tudom, hol kezdjem a problémám leírását, mert ez nem egyszerű. Talán legjobb, ha az elején kezdem.

Van egy MySQL adatbázisom, amiben rengeteg sor leledzik. A javascriptet még csak most tanulgatom, a PHP viszont eléggé jól megy.
Olyasmit szeretnék elérni, hogy ha az ember keres egy textfieldben valamit a táblázatban (lehet több oszlop szerint keresni(pl: név, kód...), ahogy beírja az első betűt (pl.: "K"), az oldal azon frame-je, amiben a tblázat van, odaugrik a K betűvel kezdődő nevűek sorához. Ha a felhasználó írja tovább a keresőszót ("Kov"), akkor már a Kov-val kezdődő sorokhoz ugrik a táblázat, így könnyebben böngészhető keresőt tudnék csinálni ("Kovács István")...

Szóval ez lenne a bajom. Gondoltam, hogy bookmarksszal kellene megcsinálni, de nem tudom pontosan hogyan...


Bármifajta segítséget szívesen vennék.

Előre is köszönöm.
 
1

widget

Fraki · 2007. Nov. 1. (Cs), 19.35
Ezt autocomplete-nek hívják, és nem táblázattal meg iframe-mel csinálják.

Attól függően, hogy mennyire kötődsz a kinézethez, használhatsz hozzá extjs-t, ha több kontroll kell a kinézet felett, használhatsz hozzá script.aculo.us autocomplete-et (bár extjs-ben is lehet css-bűvészkedni).

Nézz szét a példák között.
2

Válaszd külön a keresés és találást a megjelenítéstől!

s_volenszki · 2007. Nov. 1. (Cs), 21.37
Én csináltam már hasonlót, de ez akkora feladat volt akkoriban, hogy most azt sem tudom, honnan kezdjem...

Kellett nekem egy olyan táblázat, amiben az első oszlopban található nevekben keresni lehet, azaz pozicionálni lehessen a keresési feltételnek megfelelő első sorhoz.

Sok sikertelen elmélet után megtaláltam a megfelelőt, ami annyit tesz, hogy külön kellett választani a folyamatot két fő egységre:

1.) Keresés
2.) Pozicionálás

A keresést én úgy oldottam meg, hogy amikor php-vel előkészítettem a táblázatot, akkor a táblázaton kívül, az első oszlop tartalmát, meghatározott struktúrában, beletettem egy textarea-ba (rejtettbe természetesen). Amikor betöltődött az oldal, volt egy táblázatom, meg egy textarea-m a kereshető adatokkal.

A kereshető adatok halmaza kb. így nézett ki:

{sor:0;nev:Balázs István}{sor:1;nev:Kovács István}{sor:2;nev:Kovács Tamás}

A sor azt jelölte, hogy az a név hányadik sorban van a táblázatban, a név meg egyértelmű.

A keresés úgy zajlott, hogy az első oszlop felett volt egy szövegmező, amibe ha el kezdtem gépelni (onkeyup meg egy kis setTimeout), az indexOf függvénnyel megnéztem, hogy található-e az adathalmazban egyezőség.

Például, ha valaki a Kovács- nevet kereste és beírta azt, hogy „Kov”, akkor az indexOf(„nev:Kov”) szövegrészt kerestettem. Ha volt találat a pozícióból kinyertem a sorszámot, ha nem, alert('Nincs találat!');.

Miután megvolt a sorszám, már csak be kellett azonosítani a sort és megjelníteni. A táblázat php-s előkészítése során minden <tr> azonosítónak megkapta azt a számot, ami a sor is (persze egy kis prefixel)!

Tehát ha már eljutottunk odáig, hogy megvan a találati sor száma, akkor az egyenlő volt a táblázat sorának azonosítójával. Pl.: 9. sor = <tr id=”sor_9”>

Innentől kezdve már azt csinálsz a sorral, amit csak akarsz, hiszen ismered az aznosítóját.

Mellesleg én div-be tettem a táblázatot overflow:auto-val és kiszámoltam, hogy egy sor magassága 35px, tehát ha a a sorszámom 9, akkor a divet a 9*35 re scrolloztam javascriptel.

Hát nagyjából ennyi, de azt még hozzá kell tennem, hogy a „A javascriptet még csak most tanulgatom” az lehet hogy egy kicsit gyenge lesz! :) Nekem ez így működött, kb 1500 sorig tökéletesen!

s_volenszki
3

ötletes

cSuwwi · 2007. Nov. 1. (Cs), 23.24
első olvasásra ötletesnek tűnik, csak ha kezdő, nem fogja tudni megcsinálni ahogy mondtad.

nem vagyok híve a favágó módszernak, de talán a legegyszerűbb, ajaxal folyamatos lekérdezés a beírt karakterek után. kicsit talán lassabb, de nem kell hozzá nagy js jártasság.
néhány blogon is van hasonló kereső, livesearch-nek hívják, ha jól emlékszem, arra is rá lehetne keresni, vagy a már említett extjs-es megoldás sem rossz.
4

egy lépéssel tovább

Fraki · 2007. Nov. 2. (P), 00.57
Ennél egy lépéssel továbbvisz, ha nem textareába tesszük a szerializált anyagot, hanem egyenesen JSON-ba... S az említett megoldások is természetesen felkínálják opcióként mind az ajaxos lekérdezést, mind a statikus módszert, mikor JSON-ban előre meg van adva a tömb.

(PS. barátaim, ajaxszal és prefixszel)
5

...ajaxszal, prefixszel...

s_volenszki · 2007. Nov. 2. (P), 08.35
Már amikor írtam a post-ot, akkor tudtam, hogy valakinek szemet fog szúrni! :)
Lusta voltam kijavítani!

Bocsika...

s_volenszki