Nabízení hodnot na vyplnění formuláře z databáze
- .:M@rt!n:.
- Člen | 201
Chtěl bych do projektu udělat zadávání hodnot z formuláře, kde by se při psaní do textboxu pod ním vypisovaly hodnoty které už v db jsou a mohl bych si případně vybrat potřebnou hodnotu, která už tam je. A potom ještě na základě vyplněného prvního pole, vyplnit další, kam se načtou data z db. Je mě jasné že to bude přes AJAX, ale jsou někde návody na takovéto možnosti? Sám to do kupy nedám.
- .:M@rt!n:.
- Člen | 201
Díky. No dejme tomu, že vyplním do pole jméno. A na základě tohoto jména budu chtít do dalších polí nastavit hodnoty které náleží tomu jménu – prostě když už ty data v db jsou, abych je nemusel zadávat znova.
- Vojtěch Dobeš
- Gold Partner | 1316
Na input (s autocompletem nebo bez) bych navěsil na událost change AJAXový požadavek, který se serveru dotáže a podle případně vrácených dat vyplní další políčka.
$.post({link getMeData!},...
,
function handleGetMeData(...
atd.
- Vojtěch Dobeš
- Gold Partner | 1316
To už bych to musel celé naprogramovat :) Doporučuju tuhle přednášku. Jinak aspoň kousek:
<script>
$(function () {
$('CSS selektor k memu inputu').change(function () {
var $this = $(this);
$.get({link getDataForUser!}, {
name: $this.val()
}, function (payload) {
if (payload.user) {
$('CSS selektor pro jmeno teticky').val(payload.auntsName);
}
});
});
});
</script>
public function handleGetDataForUser($name)
{
$this->payload->user = $this->users->getByName($name);
$this->sendPayload();
}
Doufám, že jQuery i Nette se příliš nezměnilo a tohle bude fungovat.
- .:M@rt!n:.
- Člen | 201
Bude funkční na to našeptávání tento postup: https://gist.github.com/1207351 ?
- Vojtěch Dobeš
- Gold Partner | 1316
$.ajax({
url: "{!$presenter->link('autocomplete')}",
data: {
Ten link tam dej bez uvozovek, Latte je doplní automaticky. Stejně tak ten výkřičník je tam zbytečný…
Jestli je to funkční netuším, doporučuju otestovat v prohlížeči :) Ale mohlo by.
- Vojtěch Dobeš
- Gold Partner | 1316
Eh… to není, na co jsem se ptal. Tuším tedy že autocomplete. Jak to debuguješ? Sleduješ třeba v konzoli Firebugu, co se ti tam posílá? Vyhazuje server 500? Nebo nic nevrací? Budeš muset poskytnout více informací, aby ti někdo poradil.
- Vojtěch Dobeš
- Gold Partner | 1316
Aha, to je dobré zmínit :) Firebug (doplněk do Firefoxu) má záložku Konzole (popř. Síť), kde lze sledovat probíhající requesty, popř. chyby v Javascriptu.
- Vojtěch Dobeš
- Gold Partner | 1316
V tomhle snímku nikde není požadavek na tvoji aplikaci, jen na JS soubory. Nemáš v konzoli nějaké javascriptové chyby?
- .:M@rt!n:.
- Člen | 201
Jj je tam. Odkazuje na tento kód:
<script>
$(function() {
var select_name = "name";
$("input[name=" + select_name + "]").autocomplete({
source: function( request, response ) {
$.ajax({
url: "{!$presenter->link('autocomplete')}",
data: {
whichData: select_name,
typedText: request.term
},
success: function( data ) {
response( $.map( data, function( item ) {
return { label: item, value: item }
}));
}
});
},
minLength: 2,
open: function() {
$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
},
close: function() {
$(this).removeClass("ui-corner-top").addClass("ui-corner-all");
}
});
});
</script>
hned na první řádek – píše: není definována funkce
- .:M@rt!n:.
- Člen | 201
Žádná další rada? Zkoušel jsem i nějaké jiné řešení, ale furt to nemůžu rozchodit. :(
- Vojtěch Dobeš
- Gold Partner | 1316
Netuším, proč ti to hází není definována funkce. Zkus někam hodit celou šablonu atd. Takhle je to lovení v kalné vodě.