1

Тема: Не змінюється сума в input, чому?

Добрий вечір! На сайті є міні-магазин. Там діє система знижок, якщо кількість більше ніж 12, то ціна змінюється, але вона змінилася тільки зовні, при додаванні товару ціна не змінюється. Чому? Що не так? Допоможіть, я вже не можу так ... Ось ця сторінка: https://advanced.cn.ua/order

Приклад акціонного товару в таблиці:

<tr>
<td><img src="img/order/ballon.png" alt="НПУ POLYNOR"></td>
<td><span id="cena">280</span>
<div class="number">
    <span style="user-select: none;padding:3px 9px 3px 9px;" class="minus">-</span>
    <input style="user-select: none;background-color: #fff;" id="inp"POLYNOR" type="text" value="0" size="5" />
    <span style="user-select: none;" class="plus">+</span>
</div>
</td>

«Калькулятор» (суми):

$(function() {
var table = $(".order-table"),
div = table.find(".number"),
input = div.find("input").get(),
total = $(".order-end-form>input:text");

function sum() {
    var n = input.reduce(function(s, el) {
        var val = +el.value || 0,
        price = +el.dataset.price || 0;
        val < 0 && (val = 0);
        return s + val * price
    }, 0);
    total.val(n)
}
div.each(function(indx, el) {
    var price = parseInt($(el).prev().text()),
    input = $("input", el).on({
        input: sum
    })[0];
    input.dataset.price = price;
    $(el).on("click", ".minus, .plus", function(event) {
        val = +input.value || 0;
        $(event.target).is(".minus") ?
        val-- : val++;
        val < 0 && (val = 0);
        input.value = val;
        sum()
    })
})
});

Заміна ціни (в першому товар):

<script>
 function cena(){
            var a = [[120,250,'#0F0'],[48,260,'#590'],[12,270,'#950'],[1,280,'#F00']].find(el => el[0] <= (+inp.value||1)),
                cena = document.querySelector("#cena");
                cena.textContent = a[1];
                cena.style.color = a[2];
            };

            document.querySelector('#inp').addEventListener("input", cena, false);
            document.body.addEventListener("click", cena, false); 
            window.addEventListener("DOMContentLoaded", cena, false);
        </script>
Post's attachments

Screenshot_2.jpg 10.03 kb, 132 downloads since 2018-03-14 

2

Re: Не змінюється сума в input, чому?

у вас мінімум одна помилка
у першому блоку коду

id="inp"POLYNOR"

різні браузери можуть по-різному "виправляти" таку помилку у себе

Подякували: mike, dnslandar2

3 Востаннє редагувалося 221VOLT (14.03.2018 08:55:34)

Re: Не змінюється сума в input, чому?

далі, у другому блоці коду
двічі отаке

val < 0 && (val = 0);

на jQ я чихав з високої гори,
проте булеві оператори очікують булеві значення
отже по логіці там повинно бути

(val < 0) || (val == 0);

або ж я щось не так зрозумів
AND повертає true коли всі операнди повертають true
OR повертає true коли хоча б один операнд повертає true

ага, дійшло, то таке неочевидно присвоєння 0 якщо значення менше 0
навіщо так запутано писати?)))
пишіть так щоб було якомога прозоріше, і не було питань де помилка
часто простіше викинути і швиденько переписати, ніж годинами чи й днями рвати на собі волосся "як це працює?? де помилкааа??"

щось я з erlang зовсім відвик від такого defensive style написання коду :)

Подякували: mike, leofun01, dnslandar3

4 Востаннє редагувалося dnslandar (16.03.2018 14:09:59)

Re: Не змінюється сума в input, чому?

Дякую, я прибрав помилки, але знову не працює, передає початкову ціну, що робити?
Адреса сайту: https://advanced.cn.ua/order

5 Востаннє редагувалося 221VOLT (16.03.2018 17:03:56)

Re: Не змінюється сума в input, чому?

чесно, не знаю що далі з цим робити
можливо хто з любителів jQ підкаже

imho простіше викинути ту мішанину і написати код з нуля
зараз за таке завдання не візьмусь, маю над чим сидіти і без цього

схоже просто десь оновлення значення треба тицьнути
потицяйте всюди console.log з різними значеннями,
дивіться що в консоль падає і все зрозумієте

далі чітко визначтесь -- що саме, коли і як потрібно змінити,
і все у вас получиться

і ще у вас там в html-коді таке

</trы>

і таке

<input type="text" style="width: 15%;" id="square" onchange="calc(this.value);" style="width:70px" />

і ще якісь теги не сходяться, чи то забагато закриваючих, чи що...