Našeptávač – odeslání Ajaxového formuláře javascriptem
- thm
- Člen | 147
Zdravím vás,
zkouším si udělat jednoduchý našeptávač, ale nevím zcela přesně jestli
to dělám dobře.
mám formulář, který funguje ajaxově i klasicky s redirectem:
public function createComponentSearchForm(){
$form = new Form;
$form->getElementPrototype()->class[] = 'ajax';
$form->addText('keyword', 'Klíčové slovo:');
$form->addSubmit('send','Vyhledat');
$form->onSuccess[] = $this->searchFormSucceeded;
return $form;
}
public function searchFormSucceeded(Form $form){
$this->keyword = $form->getValues()->keyword;
if($this->presenter->isAjax()) $this->redrawControl('pictureList'); else $this->redirect('this');
}
V render metodě pak upravím výstup podle
@persistent $this->keyword;
– vyfiltruju natažená data
z db a zobrazím.
Vše funguje, ale nyní potřebuju skrýt input submit a dělat to onkeyup
(například).
Jenže když doplním k formuláři
$form->getElementPrototype()->onkeyup[] = 'submit();';
tak se to už ajaxově neodesílá. V čem je problém? Je jiný způsob jak se toto řeší?
Editoval thm (8. 9. 2014 14:45)
- thm
- Člen | 147
iguana007 napsal(a):
Navěs to na input a ne na formulář
Díky moc. Tak to funguje :)
$form = new Form;
$form->getElementPrototype()->class[] = 'ajax';
$form->addText('keyword', 'Klíčové slovo:')
->getControlPrototype()->onkeyup[] = '$("#send-button").submit()';
$form->addSubmit('send','Vyhledat')
->setHtmlId('send-button');
$form->onSuccess[] = $this->searchFormSucceeded;
return $form;
Editoval thm (8. 9. 2014 15:14)
- iguana007
- Člen | 970
Supr, tak a teď na to můžeš navěsit nějaký JS plugin, aby ti to fungovalo třeba až od třetího zadaného znaku + přidalo pár zajímavých features, ušetříš si tak spoustu zbytečných queries na aplikaci/databázi a budeš z toho mít plnohodnotný našeptávač ;)
Já třeba používám Typehead.js od Twitteru: https://github.com/…ypeahead.js/