nette.ajax.js snippets afterQueue nefunguje
- Jigs
- Člen | 14
Ahojte,
mám následující kód, který bych chtěl vykonat po překreslení snippetů.
$.nette.ext('snippets').after(function ($el) {
if ($el.is("#snippet-budgetItems-modalForm-unitPrice")) {
confirm('test');
console.log(unitPriceHtmlEl.val());
console.log(quantityHtmlEl.val());
let total = quantityHtmlEl.val() * unitPriceHtmlEl.val();
totalHtmlEl.val(total)
}
});
Nicméně ať zkouším cokoli, tak se mi stále tento kód provádí PŘED překreslením snippetů.
Díky confirm('test');
jsem si zastavil vykonávání kódu a
zjistil, že v tu chvíli ještě není snippet překreslen.
Koukal jsem se do nette.ajax.js a nevidím důvod, proč by se to mělo volat předtím.
Zkoušel jsem odstranit if, aby se to vykonávalo vždy, ale stejně mi to
provede vždy předtím.
Zkoušel jsem i after vyměnit za complete, before, nic nezabírá.
Díky předem za odpovědi :-).
- Jigs
- Člen | 14
Bohužel se provádí správná verze. Nicméně problém bude asi vyloženě v překreslování snippetů.
Pokud přidám takovýto event:
$(document).on("change", unitPriceHtmlEl, function () {
let total = quantityHtmlEl.val() * unitPriceHtmlEl.val();
totalHtmlEl.val(total)
});
Tak je výsledek úplně stejný.
Nicméně pokud místo ajaxu zavolám unitPriceHtmlEl.val(500);
,
tak dosáhnu požadovaného výsledku.
Moc nechápu, jak se mi „change“ event může zavolat dříve, než se snippet překreslí.
Editoval Jigs (9. 4. 2019 15:51)
- Jigs
- Člen | 14
Tak moje chyba. Doplatil jsem na svoji neznalost. Chtěl jsem si ušetřit práci, a tak jsem si uložil elemnty formu následovně:
let productHtmlEl = $('#' + {$control['editForm']['product']->htmlId});
Takže když jsem pak chtěl val() tohoto elementu, tak se používala původní hodnota a ne nová po překreslení snippetem.