Imam problemčić (i pitanje:) oko slanja parametara na server. Unutar forme imam tekstualni input koji će nakon korisnikova početka unosa preko autocompletea ponuditi moguće produžene tekstualne opcije koje su prilagođene korisniku da razumije točno što je odabrao. Ali kada korisnik nakon unosa i odabira mogućih opcija klikne na submit iliti pošalji, serveru treba biti proslijeđen samo dio odabira kao parametar jer jedino tako server vraća rezultat.
Primjer: Korisnik počne unositi "za", a autocomplete već nudi jedinu opciju "Zagreb, Hrvatska (ZAG)". Kada korisnik odabere opciju i klikne "Pošalji", serveru bi trebalo samo proslijediti ZAG.
Koji su najjednostavniji načini i zamolio bih primjer ako može. Ako sam odabrao krivi način rješavanja, opišite bolji način. Za sad koristim samo HTML/CSS/JS.
Hvala
- +/- sve poruke
- ravni prikaz
- starije poruke gore
paaaaaa mislim da to i nije baš najelegantnija stvar, jer ovako, na prvu mi se čini da bi svaki potencijalni upis morao previditi i sa if-elseif baratati sa time
imaš nešto slično ako sam dobro razumio ovdje
http://www.plus2net.com/javascript_tutorial/string-search.php
sa string.search funkcijom tragaš za nekim "sub-stringom" - ovdje "ZAG" unutar nekog većeg stringa - kod tebe "Zagrebačka županija (ZAG)", i ako ga ima, onda barataš sa njime - ispisuješ ga negdje ili šalješ, ili spremaš u neku varijablu i onda sa njom kasnije barataš
Ako je autocomplete, onda valjda imaš to u bazi spremljeno, a ako imaš u bazi onda možeš manipulirati time kako god želiš, bez search-a itd itd.
Ako je autocomplete, onda valjda imaš to u bazi spremljeno, a ako imaš u bazi onda možeš manipulirati time kako god želiš, bez search-a itd itd.
Baza gradova je unutar index.html. Broj gradova sam skratio jer je ogroman popis. Postoji bolji način smještanja u posebnu autocomplete.js datoteku, ali sad želim ovo pretraživanje da završim bez pozivanja dodatnih datoteka jer mi je ovo ostao zadnji problem. Dio head-a:
<script>
$(document).ready(function() {
$("input#autocomplete").autocomplete({
source: ["Amsterdam, Nizozemska (AMS)","Berlin, Njemačka (BER)","London, Engleska (LON)","Zagreb, Hrvatska (ZAG)"]
});
});
</script>
Dio body-a:
<FORM method="get" id="pretraga" name="pretraga" action="http://mjesto.pretraga.com/grad.aspx?grad=grad"><INPUT value="true" type="hidden" name="pretraga">
<p>Mjesto: <input id="autocomplete" name="grad" type="text"/></p>
<INPUT value="Pretraži" type="submit">
</FORM>
Kako da autocomplete popunjava kompletan naziv grada, države i kratice, ali na server šalje samo kraticu? Može li nekakav primjer ili link odakle da počnem istraživati jer na netu nisam našao kompletan odgovor za ovaj problem već samo natuknice koje me nisu na ništa bolje navele.
paaaaaa mislim da to i nije baš najelegantnija stvar, jer ovako, na prvu mi se čini da bi svaki potencijalni upis morao previditi i sa if-elseif baratati sa time
imaš nešto slično ako sam dobro razumio ovdje
http://www.plus2net.com/javascript_tutorial/string-search.php
sa string.search funkcijom tragaš za nekim "sub-stringom" - ovdje "ZAG" unutar nekog većeg stringa - kod tebe "Zagrebačka županija (ZAG)", i ako ga ima, onda barataš sa njime - ispisuješ ga negdje ili šalješ, ili spremaš u neku varijablu i onda sa njom kasnije barataš
Funkcionalnije mi djeluje http://www.plus2net.com/javascript_tutorial/string-slice.php +substr i substring. Samo moram vidjeti kako ću napraviti zahvat odozada pošto je duljina stringa dinamična...novi parametar koji trebam izvesti se treba sastojati od n-4, n-3, n-2. Postoji li i takva opcija?
Našao sam rješenje:
<html>
<body>
<script type="text/javascript">
var str="Let him who have understanding reckon the number of the beast, for it is a *human number*. Its number is 666!";
document.write(str.substr(-4,3));
</script>
</body>
</html>
pravilnije bi ti bilo
// sto trazis - velika slova unutar zagrada ([A-Z])
var re = /\(([A-Z]+)\)$/;
// string u kojem gledas (iz input polja)
var m = $('input#autocomplete').val();
var mtch = m.match( re );
// ovo je rezultat, null je failsafe, uvijek ga koristim pa eto i tu :)
mtch = mtch != null ? ( mtch.length == 2 ? mtch[ 1 ] : null ) : null;
ovo ti nađe ZAGBR, ZG ili sto vec hoces unutar zagrada
pravilnije bi ti bilo
// sto trazis - velika slova unutar zagrada ([A-Z])
var re = /\(([A-Z]+)\)$/;
// string u kojem gledas (iz input polja)
var m = $('input#autocomplete').val();
var mtch = m.match( re );
// ovo je rezultat, null je failsafe, uvijek ga koristim pa eto i tu :)
mtch = mtch != null ? ( mtch.length == 2 ? mtch[ 1 ] : null ) : null;
ovo ti nađe ZAGBR, ZG ili sto vec hoces unutar zagrada
u slučaju da je $("input#autocomplete").autocomplete({
postao $("input#grad").autocomplete({
kao i id=autocomplete u id=grad,
tada bi bilo:
"var re = /\(([A-Z]+)\)$/; //varijabli re dodajem ono što tražim(u ovom slučaju tri velika slova koja se pojavljuju unutar zagrada s tim da su zagrade isključene)(zašto se osim [A-Z] dodaju i ostali znakovi?)
var m = $('input#grad').val(); //varijabli m dodajem vrijednost input#grad
var mtch = m.match( re ); //varijabli mtch dodajem vrijednosti m koje se poklapaju sa onim u varijabli re (kako protumači da treba samo tri velika slova?)
mtch = mtch != null ? ( mtch.length == 2 ? mtch[ 1 ] : null ) : null;" //mtch je mtch i nije null - null je kada je dužina mtch 2 i kada mtch ima samo jedan slog (može opisno pojašnjenje značenja dalje)
----
kako nakon izoliranja vrijednosti unutar zagrade parametru grad ($("input#grad")) promijeniti vrijednost u vrijednost mtch da kao takav bude proslijeđen serveru(mora imati originalni Name jer ga server samo tako prihvaća)? jer se još uvijek prosljeđuje kompletan string nako submita...
dakle - korisnik unosi formu i sa autocompleteom mu sa napiše "Grad Zagreb (ZAG)" i ti želiš da ti se samo 'ZAG' pošalje na server - ne razumijem zašto bi to radio, jedino što mi pada napamet je ušteda prostora, ali ako dobro napraviš normalizaciju, tu uštedu nećeš ni osjetiit. Ja bih poslao sve - "Grad ZAgreb (ZAG)" na server, i kasnije izvukao samo ZAG iz atributa sa sql upitom (ako je baza u sqlu rađena) - za ostale nisam siguran, ali je sigurno slično. Jer ovo mi se iskreno čini puno truda za slab uspjeh :S Jedino ako možda planiraš nešto drugo
----
EDIT: sada sam se sjetio da ne smiješ imati višesložne unose u polje. shvatio sam zašto onda radiš
možda bi onda mogao napraviti ovako: (ovo je samo algoritam pa je neovisan o programskom jeziku)
- napraviš 2D polje sa 2 vrijednosti - tipa: "Grad_Zagreb" i "ZAG"; "Osiječko-baranjska" i "OSK" i onda napraviš neke petljicu koja provjerava unos unutar autocomplete polja - i da se onda ta vrijednost provjeri u matrici i ako postoji (mora postojati) onda se samo šalje njena druga vrijednost na server - tipa upisano je "Grad ZAgreb" a iz polja se šalje samo vrijednost "ZAG"
to bi se moglo napraviti u php i u javascriptu čini mi se vrlo lagano
dakle - korisnik unosi formu i sa autocompleteom mu sa napiše "Grad Zagreb (ZAG)" i ti želiš da ti se samo 'ZAG' pošalje na server - ne razumijem zašto bi to radio, jedino što mi pada napamet je ušteda prostora, ali ako dobro napraviš normalizaciju, tu uštedu nećeš ni osjetiit. Ja bih poslao sve - "Grad ZAgreb (ZAG)" na server, i kasnije izvukao samo ZAG iz atributa sa sql upitom (ako je baza u sqlu rađena) - za ostale nisam siguran, ali je sigurno slično. Jer ovo mi se iskreno čini puno truda za slab uspjeh :S Jedino ako možda planiraš nešto drugo
----
EDIT: sada sam se sjetio da ne smiješ imati višesložne unose u polje. shvatio sam zašto onda radiš
možda bi onda mogao napraviti ovako: (ovo je samo algoritam pa je neovisan o programskom jeziku)
- napraviš 2D polje sa 2 vrijednosti - tipa: "Grad_Zagreb" i "ZAG"; "Osiječko-baranjska" i "OSK" i onda napraviš neke petljicu koja provjerava unos unutar autocomplete polja - i da se onda ta vrijednost provjeri u matrici i ako postoji (mora postojati) onda se samo šalje njena druga vrijednost na server - tipa upisano je "Grad ZAgreb" a iz polja se šalje samo vrijednost "ZAG"
to bi se moglo napraviti u php i u javascriptu čini mi se vrlo lagano
Upravo to. Server treba dobiti troslovnu oznaku grada (nebitna su velika-mala slova,ali u ovom slučaju su velika u zagradi) inače ne vraća rezultat. Bazu gradova sam dobio u excell datoteci koja je brljotina kakve nema tako da sam popis gradova skinuo sa druge stranice u tekstualnom nizu odvojenom zarezima. Pošto sam počeo od nule bez tehničke pomoći, uspio sam sve riješiti do ovoga(učim u hodu:)) samo uz pomoć html-a(tijelo za inpute i pozive skripti),CSS-a(maknuo dizajn dok ne riješim problem) i JavaScripta(popis gradova, autocomplete datuma i gradova, provjera popunjenosti inputa i sam submit nakon provjere). PHP još ne bih ubacio dok ne riješim problem...tada ću moć sve zakomplicirati;)) Ostaje mi još ovaj dio i imat ću dodatak u životopis :)
Pomoć iznad mi djeluje logično i razuzmijem uglavnom sve, samo moram prokljuviti kako da lokalnu vrijednost varijable(izvučena tri slova) u JS zapišem u parametar grad u samom html-u odakle će biti proslijeđen sa ostalim parametrima iz forme na server. Kada sam upišem tri znaka sve radi, ali korisnik ne zna te kratice(niti bi ih trebao znati)...zato je tu produžena verzija.
evo - nije javascript nego je jquery - lik traži da nakon što je upisao ime i prezime (sa autocomplete) da se samo ID od toga imena i prezimena (uoči analogiju ime županije - kratica grada kod tebe) zapiše u neku novu varijablu. tada sa tom varijablom možeš dalje raditi, pa i poslati ju na server - http://stackoverflow.com/questions/5638241/jquery-autocomplete-adding-additional-data-with-autocompleted-data
nažalost, nemam pretjerano iskustva sa jqueryem, sa kodiranjem ozbiljnije, ali razumijem dobro što se radi, i mislim da je ovo upravo ono što si tražio
evo - nije javascript nego je jquery - lik traži da nakon što je upisao ime i prezime (sa autocomplete) da se samo ID od toga imena i prezimena (uoči analogiju ime županije - kratica grada kod tebe) zapiše u neku novu varijablu. tada sa tom varijablom možeš dalje raditi, pa i poslati ju na server - http://stackoverflow.com/questions/5638241/jquery-autocomplete-adding-additional-data-with-autocompleted-data
nažalost, nemam pretjerano iskustva sa jqueryem, sa kodiranjem ozbiljnije, ali razumijem dobro što se radi, i mislim da je ovo upravo ono što si tražio
hvala, ostavljam kao rezervu :) nastojim izbjeći "crne kutije" i to zasada riješiti od nule tako da upoznam načine i metode rješavanja različitih problema. Kolega
Snyder je to zasada najbolje opisao i sam sam pokušao protumačiti u svom postu gore(zato je bilo editiranja kako sam kopčao napisano), ali fali mi iskustvo i zasada još nisam uspio otkriti kako vrijednost mtch-a vratiti u parametar grad(iz JS-a nazad u html prije nego se svi parametri pošalju na server) tako da se još preusmjerava cijeli string...razni načini prebacivanja vrijednosti mtch (i preko pokazatelja) na grad za sada nije uspjelo, ali se bar uči kako ne ide :D
Rješenje je jednostavno na kraju, ali se mora naučiti:$('#grad').val(mtch);:))