JQuery: Autocomplete betöltés probléma
Sziasztok.
Van egy php fájl, ebben pedig egy text input-om, amire rá van húzva a jQuery-s autocomplete települések kiválasztásához.
A dolog nagyon szépen működik amikor az input-ot tartalmazó php fájlt csak önmagában vagy az index.php-ből hívom meg (utóbbi esetben include-ból), beírásra jön az autocomplete-s legördülő menü, ki tudom választani, stb.
A gond akkor van amikor nem include-ból hoznám be, hanem egy div-be tölteném be jQuery-vel:Ekkor már nem működik az autocomplete, a Chrome ellenőrző eszközében a következőt kapom:
Ezt azért nem értem, mert a jQuery-vel kapcsolatos minden szkript a div_kereses.php -ben van meghívva (ezért is fut akkor is ha csak önmagában ezt a php-fájlt hívom meg), de ha div-be töltöm mégis olyan, mintha nem is látná a függvénykönyvtárakat. Bár elvileg nincs rá hatással, de kísérletképpen az index.php-ben is meghívtam a szkript-eket, de ahogy várható volt ennek nincs semmilyen hatása.
Bár csak pár hónapja kezdtem el javascript-tel foglalkozni, eddig minden sikerült amit elterveztem és ha voltak is nehéz pillanataim, idővel bármin átrágtam magam, de itt most nagyon elakadtam. Tud valaki segíteni abban, hogy ilyen esetben mi lenne a megoldás?
Előre is köszönök minden segítséget.
■ Van egy php fájl, ebben pedig egy text input-om, amire rá van húzva a jQuery-s autocomplete települések kiválasztásához.
A dolog nagyon szépen működik amikor az input-ot tartalmazó php fájlt csak önmagában vagy az index.php-ből hívom meg (utóbbi esetben include-ból), beírásra jön az autocomplete-s legördülő menü, ki tudom választani, stb.
A gond akkor van amikor nem include-ból hoznám be, hanem egy div-be tölteném be jQuery-vel:
jQuery(document).ready( function() {jQuery("#div_felulet").load("div_kereses.php");} );
Uncaught TypeError: Object [object Object] has no method 'autocomplete'
Ezt azért nem értem, mert a jQuery-vel kapcsolatos minden szkript a div_kereses.php -ben van meghívva (ezért is fut akkor is ha csak önmagában ezt a php-fájlt hívom meg), de ha div-be töltöm mégis olyan, mintha nem is látná a függvénykönyvtárakat. Bár elvileg nincs rá hatással, de kísérletképpen az index.php-ben is meghívtam a szkript-eket, de ahogy várható volt ennek nincs semmilyen hatása.
Bár csak pár hónapja kezdtem el javascript-tel foglalkozni, eddig minden sikerült amit elterveztem és ha voltak is nehéz pillanataim, idővel bármin átrágtam magam, de itt most nagyon elakadtam. Tud valaki segíteni abban, hogy ilyen esetben mi lenne a megoldás?
Előre is köszönök minden segítséget.
Relevans
A kód
(bocsi a sok külön style-ért, de így most könnyebb volt)
Ez így önmagában nagyon
Milyen alábbi kódból? Ott nincsen sehol
autocomplete
. És ha már PHP-t használsz, miért implode, miért nem json_encode? Mert akkor az automatikusan elvégezni az escape-elést is.Te vagy a JS szakértő :), így
Ha jól emlékszem (homályos emlékek betöltése :) ) azért tértem át implode-ra json_encode -ról, mert a json_encode az UTF-8 -at szereti (vagy talán ezt csak összeálmodtam, de ez így most működik és ne menjünk bele abba, hogy UTF-8 vagy 8859-2 :) ). Az biztos, hogy nem emiatt nem megy :)
load callback
$.load()
itt ugye van egy callback hívási lehetőség, ami akkor hívódik meg, amikor betöltődött a kért tartalom.
definiáld a callback-et és ott rakd rá az autocomplete-et.
Összejött, de máshogyan :)
Először is köszönöm a segítséget, bár szívtam a fogamat, mert elméletben pedzegettem mire gondolsz, de a gyakorlatba már nem tudtam átültetni (igen, kezdő vagyok, szamárpados :) ), ahhoz meg hirtelen nem volt pofám, hogy csak úgy elkérjem a komplett kódot :).
Ám de... :) Onnan jött a megoldás ahonnan nem vártam: egészen véletlenül arra vetemedtem, hogy a szkript hivatkozásban szereplő ajax.googleapis.com -os jQuery.ui helyett letöltsem a legújabb jQuery.ui -t és közvetlenül a szerverről hívjam meg. Nem gondoltam, hogy ez bármilyen változást hoz, de a legnagyobb meglepetésemre így már a div-be behívva is működik! :)
A miértről persze továbbra sincs fogalmam, ezért őszintén megköszönöm, ha szánsz rám pár percet és elmondod mi lett volna a Te megoldásod.
json_encode: gondolom arra céloztál, hogy Te is ezt tartanád kívánatosnak, de ezzel kapcsolatban azt nem értem, hogy miért használjak egy UTF-8 -as kódolású szövegekkel működő függvényt egy 8859-2 -es adatokra megírt lapon?
a div-be történő behívást
Ez nem igaz. A betöltött tartalom aszinkron kerül be az oldalra, azaz egy külön HTTP kérés indul a szerver felé. Amint a válasz visszaérkezik, akkor az elérhető lesz a JavaScript számára. A szerver oldalról természetesen ez egy oldalletöltésnek számít, mivel egy HTTP kérés történik.
A jQuery az összes JavaScript kódot kiszedi a
load
-dal betöltött tartalomból. Ezért aload
-dal betöltött tartalomba ne rakj JavaScript kódot, hacsak nem akarod azt te kézzel feldolgozni.Összefoglalva: ne rakj
script
-et az AJAX-szal betöltött tartalomba, használd aload
callback paraméterét, hogy inicializáld a betöltött tartalomra a viselkedést.Másik dolog: A JavaScript csak UTF-8-at szereti, ezért jobb, ha abban van a JavaScripttel feldolgozandó dolog, hogy ne érjenek meglepetések. A legjobb természetesen, ha az egész oldal UTF-8.
Ez nem igaz. A betöltött
Értem és köszönöm, hogy kijavítottál, kezd kisimulni a dolog :)
No, ezt már nem értem... a "div_kereses.php" -ben van pl. az AddToList javascript függvény és most a div-be történő load után is úgy működik ahogyan kell, ahogy önmagában (load nélkül) meghívva is. Korábban is használtam már load-on belüli js-t, az első próbálkozástól kezdve minden böngészőn gond nélkül működik...
Ez az amit még sosem csináltam... ööö... nem béna, csak kezdő :)
De a kijelentésed elejét nem értem, mert éppen most sikerült a load-on belül elhelyezett <script> elem átírásával működésre bírni az autocomplete-t...
Eddig csak sütikezelésnél futottam bele ebbe a problémába, de végül kikerültem úgy hogy nem kellettek a sütik (a mostanában terjengő hírek után nem is bánom). Mindenesetre köszönöm a jó tanácsot és megfontolom, bár eddig még szerencsére (lekopogom) nem volt vele gondom.
+1