Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
#1 · Zasláno: 25. 9. 2016, 18:59:35
Potřeboval bych nějak znovu předefinovat funkci nebo vlastnost (nevím přesně co to vlastně je).
Mám ve scriptu toto: $('#autocomplete-input').autocomplete({ lookup: values, lookupFilter: function (suggestion, originalQuery, queryLowerCase) { return suggestion.value.toLowerCase().indexOf(queryLowerCase) === 0;}, autoSelectFirst: true, formatResult: function (suggestion, currentValue) { var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g'), pattern = '^(' + currentValue.replace(reEscape, '\\$1') + ')'; return suggestion.value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>'); } }); Jedná se o jquery našeptávač. Jenže bohužel funguje tak, že se po načtení stránky do položky lookup načte proměnná values a po změně proměnné values tam pořád zůstávají původní hodnoty. Jenže já potřebuju, aby se v našeptávači ty hodnoty měnily podle aktuálního stavu proměnné values .
Nové hodnoty získávám ajaxem, v tom manuálu je zmíněna položka onSearchStart , kde by snad mělo být možné aktualizovat položku lookup , ale zkoušel jsem to takto a nefunguje to:
/* PHP autocomplete_values.php vrací string: ['item1','item2','item3'] */ function getAutocompleteValues(){ var num = $('#another-input').val(); $.ajax({ url: "/autocomplete_values.php", type: "POST", data: {id: num}, success: function (response) { return eval(response); } }); } $(document).ready(function(){ $('#autocomplete-input').autocomplete({ onSearchStart: function (){$(this).autocomplete('setOptions', { lookup: getAutocompleteValues() });}, lookupFilter: function (suggestion, originalQuery, queryLowerCase) { return suggestion.value.toLowerCase().indexOf(queryLowerCase) === 0;}, autoSelectFirst: true, formatResult: function (suggestion, currentValue) { var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g'), pattern = '^(' + currentValue.replace(reEscape, '\\$1') + ')'; return suggestion.value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>'); } }); }); Celý script našeptávače autocomplete je zde: jQuery Autocomplete Tak mě napadlo nejsnadnější řešení, že bych celý to nadefinování našeptáváče nějak vždy znovu předefinoval, tedy zadal znovu : $('#autocomplete-input').autocomplete({ /*aktuální obsah*/ } }); Je to prosím nějak možné? |
||
_es Profil |
#2 · Zasláno: 25. 9. 2016, 20:11:34
quatzael:
„Celý script našeptávače autocomplete je zde: jQuery Autocomplete“ „Je to prosím nějak možné?“ Prečo si nepozrieš v dokumentácii k tomu „našepkávaču“, ako meniť jeho vlastnosti a správanie? Kedy to meniť vieš snáď sám - popísal si to v [#1]. |
||
quatzael Profil |
#3 · Zasláno: 25. 9. 2016, 22:37:15
_es:
To jsem si četl, ale není tam nic použitelnýho.. A v ty ukázce vidíš, že to zkouším a nefunguje to.. |
||
_es Profil |
#4 · Zasláno: 26. 9. 2016, 16:55:22
quatzael:
Snáď si tú dokumentáciu môžeš pozrieť nejako dôkladnejšie. Potrebuješ udalosť onSearchStart ? Nepotrebuješ použiť nejakú udalosť čo nastane až po načítaní dát?
„Jenže já potřebuju, aby se v našeptávači ty hodnoty měnily podle aktuálního stavu proměnné values .“
„Našepkávač“ nemá nijaké možnosti, ako by mohol reagovať len na menenie nejakej premennej. Musíš pracovať s vlastnosťami, udalosťami a metódami „našepkávača“ podľa jeho dokumentácie. |
||
quatzael Profil |
#5 · Zasláno: 26. 9. 2016, 23:57:13
_es:
„Snáď si tú dokumentáciu môžeš pozrieť nejako dôkladnejšie.“ To bych rád, ale skoro nic v ní není. Jestli teda taky myslíš tuhle: Ajax AutoComplete for jQuery Je tam prd, nic se nedozvíš.. „Potrebuješ udalosť onSearchStart ? Nepotrebuješ použiť nejakú udalosť čo nastane až po načítaní dát?“
Já nevím, ale připadá mi naprosto logický, abych načetl aktuální hodnoty před tím než začne našeptávač něco zobrazovat než potom.. „Musíš pracovať s vlastnosťami, udalosťami a metódami ‚našepkávača‘ podľa jeho dokumentácie.“ Ale jak? Je možný nějak obecným způsobem změnit nějakou vlastnost našeptávače třeba prostřednictvím úplně jiné funkce? |
||
Davex Profil |
quatzael:
„Je tam prd, nic se nedozvíš..“ Já to tedy vidím poprvé v životě, ale proč nevycházíš z příkladu použití s AJAXem? Je s tím nějaký problém? |
||
quatzael Profil |
#7 · Zasláno: 27. 9. 2016, 02:34:14
Davex:
Vycházím, ale nefunguje to. Navíc to vypadá, že ten AJAX, který je zakomponován v tom našeptávači má fungovat tak (ale stejně nefunguje), že při každý změně v inputu se aktuální obsah inputu odešle ajaxem na server a odtamtud přijdou Suggestions. To já ale stejně nechci. Já mám řeším situaci s dvěma inputy A a B. Našeptávač pro input A je statický (hodnoty v lookup) a funguje. Jenže na základě toho co vyplní uživatel do inputu A, potřebuju aby se ten obsah inputu A odeslal na server a přišly odpovídající hodnoty pro našeptávání v inputu B. Proto si chci celou tu záležitost s ajaxem vyřešit sám a jenom po získání aktuálních dat přepsat ty hodnoty v našeptávači pro input B. |
||
_es Profil |
quatzael:
Tak si teda konečne zrozumiteľne popísal, čo vlastne chceš. V [#1] v druhom kóde: Ako si asi predstavuješ, že by mal fungovať príkaz return vo funkcii definovanej na 9., 10. a 11. riadku?
|
||
quatzael Profil |
#9 · Zasláno: 27. 9. 2016, 10:56:32
_es:
„V [#1] v druhom kóde: Ako si asi predstavuješ, že by mal fungovať príkaz return vo funkcii definovanej na 9., 10. a 11. riadku?“
No nevím. Čekal bych, že ze stringu udělá skutečný pole a pošle ho tam odkud byla ta funkce volaná.. Já v javascriptu nejsem vůbec žádnej profík. Nevím přesně jak tyhle věci fungujou.. |
||
_es Profil |
#10 · Zasláno: 27. 9. 2016, 11:42:00
quatzael:
„Já v javascriptu nejsem vůbec žádnej profík.“ Na to predsa nemusíš byť „profík“ to sú základné veci. „a pošle ho tam odkud byla ta funkce volaná..“ A kam „tam“ by ho mala poslať? Funkcia bude zavolaná (podľa dokumentácie jQuery) keď server vráti dáta, čo môže byť aj za dlhý čas, medzitým beží JS ďalej - to je to „A“ v skratke AJAX. Bráni ti snáď niečo zmeniť stav našepkávača v tej funkcii? |
||
quatzael Profil |
#11 · Zasláno: 27. 9. 2016, 12:07:14
_es:
„A kam ‚tam‘ by ho mala poslať?“ Tak konkrétně v tom scriptu je to řádek 17: onSearchStart: function (){$(this).autocomplete('setOptions', { lookup: getAutocompleteValues() });}, „Bráni ti snáď niečo zmeniť stav našepkávača v tej funkcii?“ Já nevím jak. O to tady v celým vlákně jde! Vůbec nevím jak to změnit v tom našeptávači, tak zkouším všelijaký možnosti.. |
||
_es Profil |
quatzael:
„Tak konkrétně v tom scriptu je to řádek 17:“ Čo by to malo mať spoločné s tou inou funkciou? Akým záhadným spôsobom by sa malo predať eval(response) z 10. riadku do 17. riadku? Funkcia getAutocompleteValues ti vracia undefined a aj keby niečo vracala, tak by to nemalo zmysel, lebo vtedy ešte server nevrátil dáta.
„Já nevím jak.“ No predsa v tej funkcii z 9. riadku. Namiesto nezmyselného príkazu return .
|
||
quatzael Profil |
#13 · Zasláno: 27. 9. 2016, 13:07:57
_es:
Ale já nevím jak.. To si tam můžu přímo znovu zadat celou tu definici naseptavace? Tzn. $('#autocomplete-input').autocomplete({... můžu zadávat pořád dokola a bude se to přepisovat s aktuálními daty?
|
||
_es Profil |
#14 · Zasláno: 27. 9. 2016, 13:22:23
quatzael:
„To si tam můžu přímo znovu zadat celou tu definici naseptavace?“ To, ako máš pracovať s našepkávačom, máš predsa v jeho dokumentácii. Ty ho chceš používať, tak si to pozri. Nebude to tu študovať niekto, kto ho ani nemieni použiť. V 17. riadku sa predsa pokúšaš o nejaké jeho prenastavenie, tak ho použi v tej funkcii z 9. riadka. Samozrejme nie je zaručené, že zvyšok tvojho kódu neobsahuje podobné chyby. |
||
quatzael Profil |
#15 · Zasláno: 27. 9. 2016, 13:32:21
_es:
Já jsem psal, že v ty dokumentaci není skoro nic a to co tam je tak prostě nefunguje... |
||
_es Profil |
#16 · Zasláno: 27. 9. 2016, 13:46:29
quatzael [#15]:
Posledné rady sa ale predsa netýkali našepkávača, ale toho, že nevieš ani použiť AJAX. Na otázku „To si tam můžu přímo znovu zadat celou tu definici naseptavace?“ máš odpoveď, daj „tam“ to, čo by tam podľa dokumentácie našepkávača bolo vhodné. |
||
quatzael Profil |
_es:
„máš odpoveď, daj ‚tam‘ to, čo by tam podľa dokumentácie našepkávača bolo vhodné.“ Nemám, několikrát to tady už do nekonečna opakuju, že v dokumentaci je "h"! Není tam prostě nic, z čeho by se dalo usoudit jak to správně nastavit. Nevím už jak to líp napsat, že prostě dokumentace je k ničemu, a jakýkoli rady typu "pročti si dokumentaci" jsou mi na nic, protože to už jsem udělal několikrát a odpověď jsem tam nenašel.. Zkoušel jsem to takhle celý předefinovat, ale chová se to strašně divně (uvedeno v komentářích): var values = ['Lucka','Simona','Dana','Linda','Lenka','Petra',]; $('#autocomplete-input').autocomplete({ lookup: values, /* další věci */ }); /* když zadám do inputu "L", našeptávač zobrazí: 'Lucka','Linda','Lenka' */ /* po nějaké události proběhne tento kód: */ var newvalues = ['Rachel','Samantha','Ariana','Megan','Jennifer','Lily','Nicky']; $('#autocomplete-input').autocomplete({ lookup: newvalues, /* další věci */ }); /* po znovu zadání "L" do inputu, našeptávač zobrazí: 'Lily','Linda','Lenka' */ |
||
_es Profil |
#18 · Zasláno: 27. 9. 2016, 15:52:43
quatzael [#17]:
Keď si zadefinoval novú premennú newvalues , nemal by si ju aj v 12. riadku použiť? Okrem toho, volanie s argumentom 'setOptions' , čo si skúšal predtým, nefunguje?
|
||
quatzael Profil |
#19 · Zasláno: 27. 9. 2016, 16:50:14
_es:
Sorry, jasně už jsem to opravil. Ale prostě se to chová tak, že ta první položka se z toho původního pole smaže a pole se zmergují. 'setOptions' nefunguje, protože se týká úplně jiných nastavení. Uvádí to i ta dokumentace..
|
||
_es Profil |
#20 · Zasláno: 27. 9. 2016, 21:01:39
|
||
quatzael Profil |
#21 · Zasláno: 27. 9. 2016, 21:10:14
_es:
Clear maže jen Cache. Dispose nefunguje, protože je jen v dokumentaci, nikoliv v samotným scriptu.. |
||
_es Profil |
#22 · Zasláno: 27. 9. 2016, 21:13:46
quatzael [#21]:
No tak v krajnom prípade môžeš zmazať celý element a vytvoriť ho znovu. |
||
pcmanik Profil |
#23 · Zasláno: 27. 9. 2016, 21:17:15
Vlákno sa už dosť rozrástlo a bez výsledku, tak nebolo by lepšie proste použiť iný našeptávač, ktorý má dobrú dokumentáciu?
|
||
quatzael Profil |
#24 · Zasláno: 27. 9. 2016, 23:56:28
Vyřešeno. Stáhl jsem si jinou verzi
autocomplete a tam už ten dispose je.
Díky za rady. |
||
Časová prodleva: 8 let
|
0