Autor | Zpráva | ||
---|---|---|---|
Pleak Profil * |
#1 · Zasláno: 25. 9. 2018, 22:58:00
Zdravím,
mám následující kód: https://codepen.io/anon/pen/eLwaQg A mám zde problém, kdy potřenuji na základě hodnoty v input#listku násobit s input#cena_listek, ale hodnotu z input#listku my to bere vždy tu předcházející před změnou pomocí + / -. Pokud hodnotu zadám do inputu přímo, přepočet funguje v pořádku. Mohl bych poprosit o radu, kde je problém? Děkuji moc |
||
DarkMeni Profil |
#2 · Zasláno: 26. 9. 2018, 00:40:33
Pomůže, když tam místo
$('.qty-input').on('click', '.plus', function (e) //... bude jen $('.plus').on('click', function (e) //...
Ale správnější by asi bylo na konec těch funkcí dát $('#listku').trigger('change'); a z $(document).ready() odebrat to $(".plus, .minus").click(formChanged);
Jinak ještě jedna rada, místo vypisování pokaždý $(this).parent().siblings('input') by se to mohlo uložit do proměné, třeba s názvem input, a pak bude stačit psát jen to "input" místo celého toho selektoru.
|
||
Časová prodleva: 13 dní
|
|||
Pleak Profil * |
#3 · Zasláno: 8. 10. 2018, 21:20:03
Díky moc za pomoc, ještě řeším jednu drobnou věc, přidal jsem tam možnosti platby a v případě, že se platí hotově, tak by se měl zobrazit výběr pobočky:
codepen.io/anon/pen/gBgpXo Což funguje bez problémů, ale v případě, že je zvolená platba "Hotově" a kliknu na "+" nebo "-", tak se tam zbytečně stále skrývá a znovu zobrazuje div#pobocky. Dá se to prosím nějak vyřešit? Snažil jsem se z části: $( "#pobocky" ).hide( "slow" ); if(platba == 3)$( "#pobocky" ).show( "slow" ); Vytvořit samostatnou funkci a volat ji po "formchanged()" pouze v "$('#listku').trigger", ale to bohužel nezafungovalo. Moc díky za radu |
||
DarkMeni Profil |
Já bych to celkově upravil asi takto:
// Zmena poctu listku function zmenPocet() { var n = 1; // predpoklad: class="plus" if(this.classList.contains('minus')) n = -1; // class="minus" var input = $('#listku'); var pocet = parseInt(input.val(), 10) + n; if(pocet < 1) pocet = 1; input.val(pocet); input.trigger('change'); // umele vyvolani eventu, jelikoz input.val() sam o sobe event nevyvola // tzn. ze se spusti jeste funkce formChanged, ktera je navazana na tento input pri "onchange" eventu } // formChanged() function formChanged() { var listku = parseInt($("#listku").val(), 10); var cena_listek = $('#cena_listek').val(); var platba = $("input[name='platba']:checked").val(); var cena_celkem = 0; var poplatek = 0; poplatek = listku * 19; cena_celkem = (cena_listek * listku) + poplatek; if(platba == 3) { cena_celkem = cena_listek * listku; $( "#pobocky" ).show( "slow" ); } else $( "#pobocky" ).hide( "slow" ); $( "#cena" ).text(Math.ceil(cena_celkem) + ' Kč'); $( ".price-tax" ).text(poplatek); } // document Ready() $(document).ready(function(){ // Navazani eventu na tlacitka a inputy $('.qty-input button').on('click', zmenPocet); $('#listku, input[name="platba"]').on('change', formChanged); // $('#listku').trigger('change'); }); 1) Na .plus, .minus stačí jedna funkce a v ní podmínka jestli je potřeba přičíst 1 nebo odečíst 2) Definice funkce uvnitř jiné funkce zde není potřeba, takže formChanged může být venku, ať je to přehlednější 3) $('#listku').trigger( ... ) neslouží k navazování funkcí které se mají provést, ale k vyvolání eventu (když už je funkce pro daný event navázaná přes $('#listku').on( ... ) ) 4) Pokud má nějaký html element id, tak ho není třeba vybírat přes $('input#listku') ani $(this).parent().siblings('input') , stačí $('#listku') , protože id by mělo být unikátní - žádný jiný element na stránce by neměl mít stejné id (na to pak slouží class, to může mít stejné několik elementů)
Ale ke konkrétnímu dotazu: // ve funkci formChange() obalit $("#pobocky").show do podmínky if(platba == 3) { cena_celkem = cena_listek * listku; $( "#pobocky" ).show( "slow" ); } else $( "#pobocky" ).hide( "slow" ); |
||
Časová prodleva: 6 let
|
0