Autor Zpráva
quatzael
Profil
Při zpracování BB značek došlo k samovolnému sežrání celého příspěvku. Pardon.
Když vyberu hodnotu v textovým inputu z našeptávače (autocomplete), tak se tam ta hodnota sice vloží, ale já jí už nejsem schopen přečíst javascriptem, protože moje funkce se spouští po události onchange a stihne to zaznamenat akorát to co jsem fakticky naťukal do inputu. To co se tam pak vloží tím autocomplete scriptem už nevidí..

Nevíte někdo kam bych to mohl tady do toho scriptu vložit (tu mojí funkci, která se má chovat jako onchange)?? Tedy kde v tom scriptu je to vložení hodnoty do inputu a následně ztráta focusu..??

github.com/devbridge/jQuery-Autocomplete

Moderátor Chamurappi: Smazáno 20 kB zdrojáku. Jsi normální? Proč sem rveš celý zdroják, který si navíc můžeme stáhnout na adrese, kterou uvádíš? Vypadáme snad jako pastebin?
preca1
Profil
Zdravim,
proč nepoužiješ událost select?
quatzael
Profil
preca1:
proč nepoužiješ událost select?
To mi ale na ten autocomplete nafunguje.. Prostě když kliknu na něco z toho našeptávače tak mi to jako událost select nerozpozná..
preca1
Profil
Můžeš ukázat použití?
V tebou odkázanym API píšou:
onSelect: function (suggestion) {} Callback function invoked when user selects suggestion from the list. this inside callback refers to input HtmlElement
To mi moc nesedí, že by to nefungovalo.
quatzael
Profil
preca1:
Navíc select je přece událost když něco přetáhnu myší a označím, ne?? To snad nemá nic společnýho s kliknutím na nabídku z našeptávače..


preca1:
To onSelect je tam zřejmě jenom nějaká vlastnost objektu.. Nemá nic společnýho s událostí onselect..
preca1
Profil
Neni to nativní událost. Je to událost, kterou si definuje ta komponenta. Když se koukneš do třetího zdrojáku, co si sem dal, na řádek 61, tak uvidíš, že se tam volá metoda onSelect. Její implementace začíná na řádku 117 toho samýho zdrojáku.


Ano, je to „zřejmě jenom nějaká vlastnost objektu“, která ale ve skutečnosti je buď null, nebo uživatelem definovaná metoda, která se volá, když je vybraná nějaká hodnota z toho našeptávače.
quatzael
Profil
Tak já jsem tu svojí funkci hodil přímo do toho onSelect za řádek 126 a funguje to!!


Ale teď bych ještě potřeboval zjistit událost kdy uživatel vybere z našeptávače, který je přímo součástí prohlížeče a pamatuje si dřívější zvolené hodnoty.. Je na to nějaký způsob??
preca1
Profil
Teď koukam, že ten odkaz v mym prvnim příspěvku asi odkazuje na jinej jQuery autocomplete (je to možný?), takže se omlouvam za případnou mistifikaci.
Ale každopádně tvoje řešení neni správný - nikdy by si neměl upravovat zdrojáky nějaký knihovny, pokud si nejseš na 100% jistej, že to je bug, nebo z jinýho závažnýho důvodu. A tohle určitě neni ten důvod, protože mně to funguje, jak má - když vybereš nějakou hodnotu, zavolá se mnou definovaná metoda.

K tvý doplňující otázce odpověď nemam.
quatzael
Profil
preca1:
protože mně to funguje, jak má - když vybereš nějakou hodnotu, zavolá se mnou definovaná metoda.
Tomuhle nerozumím.. Myslel jsi, že TOBĚ to funguje, jak má nebo, že MĚ to funguje, jak má?? Každopádně ten script v tom jsfiddle co jsi tam uvedl mi nic nedělá a ani nevím co by měl dělat??

v tom mým autocomplete kódu je tenhle komentář:
/**
* Ajax Autocomplete for jQuery, version 1.2.4
* (c) 2013 Tomas Kirda
*
* Ajax Autocomplete for jQuery is freely distributable under the terms of an MIT-style license.
* For details, see the web site: http://www.devbridge.com/projects/autocomplete/jquery/
*
*/

/*jslint browser: true, white: true, plusplus: true */
/*global define, window, document, jQuery */

// Expose plugin as an AMD module if AMD loader is present:


preca1:
Jinak tady je přímo celej ten kód, ale už trochu novější verze:
https://github.com/devbridge/jQuery-Autocomplete/blob/master/src/jquery.autocomplete.js


preca1:
K tvý doplňující otázce odpověď nemam.
Tím myslíš, že víš o co se jedná a nevíš jak to vyřešit??
preca1
Profil
Mně to funguje. Myslel sem, že chceš zavolat nějakou svojí metodu, když uživatel vybere hodnotu z našeptávače. Jak to správně udělat sem demonstroval v tom fiddlu. Napíšeš 1 a vybereš hodnotu a zavolá se alert - tam bys zavolal svojí funkci.

K tomu autocompletu: onehdá sem to hledal a zjistil sem, že standardizovaná událost neni a nakonec sem se na to vykašlal, protože to pro mě nebylo tak důležitý.
FF, IE 9+ a Safari 5+ maj údajně událost input, nebo textinput, nezkoušel sem.
_es
Profil
quatzael:
Ale teď bych ještě potřeboval zjistit událost kdy uživatel vybere z našeptávače, který je přímo součástí prohlížeče a pamatuje si dřívější zvolené hodnoty.. Je na to nějaký způsob??
Spoľahlivý spôsob je asi len neustále kontrolovanie zmeny hodnoty vo vysokej frekvencii: Údálost Javascriptu pro výběr z nabídky automat. dokončování
quatzael
Profil
preca1:
Jak to správně udělat sem demonstroval v tom fiddlu.
V tom fiddlu, mi to ale nefunguje!! Žádnej autocomplete tam nejede!!


_es:
Spoľahlivý spôsob je asi len neustále kontrolovanie zmeny hodnoty vo vysokej frekvencii
A nezatěžuje to moc ten prohlížeč? Když to takhle udělám třeba u dvaceti inputů například??
_es
Profil
quatzael:
A nezatěžuje to moc ten prohlížeč? Když to takhle udělám třeba u dvaceti inputů například??
Voči iným veciam, čo často bežia v prehliadači to je asi zanedbateľné- najjednoduchšie je to asi vyskúšať. Alebo si rozmyslieť, či sa to vyplatí.
preca1
Profil
Mně to ve FF i Chromiu funguje. Napíšu do toho inputu 1 a vyskočí mi našeptávač s hodnotami 1 a 11 (akorát neni nastylovanej). Kliknu na 11 a objeví se mi alert. Reaguje i na klávesy.

K té kontrole pomocí intervalu - můžeš nastavit delší. Teoreticky bys to moh zapínat a vypínat v závislosti na označení inputů.
quatzael
Profil
preca1:
Aha, já jsem to zkoušel v IE9 a nefungovalo to.. V Mozille mi to jede..
quatzael
Profil
_es:
Když tam dávám tento kód:

(function(){var i = document.getElementById("myinput"), v = i.value;
setInterval(function(){if(i.value !== v){ v = i.value; niečo sprav}}, 50)})();

tak mi to u některých inputů háže chybu: Nelze načíst hodnotu vlastnosti value: Objekt má hodnotu Null nebo není definován.
_es
Profil
quatzael:
mi to u některých inputů háže chybu: Nelze načíst hodnotu vlastnosti value: Objekt má hodnotu Null nebo není definován.
Aj riešenie tej chyby máš v tom odkazovanom vlákne.
quatzael
Profil
_es:
Jestli narážíš na to, že ten script má být až na konci stránky (za těmi inputy) tak to jsem samozřejmě udělal. Ale mám tam hodně includovaných částí formuláře a některý inputy v tom HTML kódu chybějí (konečný formulář má totiž strukturu odvozenou v závislosti na tom co uživatel zvolí v předchozích krocích, takže mám v PHP různý podmínky na to, který inputy se mají zobrazit a který ne..

Dal jsem to v tom javascriptu ještě radši celý do
$(document).ready(function()

Ale ještě tam budu muset teda v tom javascriptu udělat nějaký podmínky.
Nejlépe jen zjistit jestli tam ten daný element v tom HTML kódu opravdu je..


Jde to vyřešit takto??

if (document.getElementById("myinput"))
{
(function(){var i = document.getElementById("myinput"), v = i.value;
setInterval(function(){if(i.value !== v){ v = i.value; niečo sprav}}, 50)})();
}
_es
Profil
quatzael:
Prehliadač nezaujíma, ako a z čoho si vygeneroval výsledný HTML kód - to je tvoja starosť, aby bolo výsledné poradie častí kódu správne. To je taký problém dať trebárs ihneď za značku <input> aj príslušnú značku <script>?

Jde to vyřešit takto??
Tým sa „vyrieši“ len to, že sa to pre neexistujúci input samozrejme nenastaví.
quatzael
Profil
_es:
To je taký problém dať trebárs ihneď za značku <input> aj príslušnú značku <script>?
Už jsem to vyřešil s těma podmínkama na ty includovaný soubory.. Mohl bych to dát i za to ale už se mi to fakt nechce předělávat.. Těch inputů je tam strašně moc takže něž bych to zase celý přepsal tak je den pryč.. Navíc je lepší když je to takhle v externím souboru, protože se to dá líp spravovat a HTML kód zůstane o něco přehlednější..

Každopádně dík!
_es
Profil
quatzael:
Navíc je lepší když je to takhle v externím souboru
<script> s odkazom na externý súbor môže byť aj posledná značka v HTML kóde.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: