Если пересчет нужно вести после каждой смены селекта то да, внутри обработчика
Будет чтото вроде: var summ=0; $('div.new-price span').each( function(){ summ += $(this).html(); }); |
На данный момент пришел к тому, что:
1) При выборе селектов в разных значениях все считается правильно; 2) Если вновь выставить селекты на единицу - все правильно считается и отображается 0 там, где это должно быть; 3) Если выставить какой-либо селект, а затем нажать по блоку .close то сам "товар" (с селектом, названием и т.д.) удаляется, однако значение его селекта остается... Т.е. я так понимаю, что нужно как-либо связать функцию "удаления" блока и очистки значений от его селектов.. Как это можно сделать? Вызывать при закрытии функцию так же как при change? Привожу вновь небольшой кусок кода (выше в сообщениях он тоже есть, но для наглядности выброшу его тут): $(".billboards #list-view .price .numbers").each(function() { var e = $(this).text(); $(this).text(triads(e)) }), r(), $(document).on("click", "#request-form .selected-billboards .unit .close", function(e) { var t = $(this).closest(".unit").attr("data-id"), r = localstorageGet("billboards_ids"); r.splice(r.indexOf(t), 1); var o = $(this); localstorageSet("billboards_ids", r, function() { o.closest(".unit").fadeOut(300, function() { 0 == r.length && a() }) }), e.preventDefault() }), a(), $("#request-form").validate({ rules: { org: "required", phone: "required", fio: "required" }, messages: { org: "Обязательное поле", phone: "Обязательное поле", fio: "Обязательное поле" }, Если я правильно понимаю, то "блок" .unit не удаляется, а лишь скрывается.. или нет? В общем, суть в том, что я никак не могу добиться того, чтобы перед его удалением конкретно его селект уходил в первое значение (тогда все будет правильно считаться)... Помогите пжалста, я разбираюсь, ищу варианты в гугле, но пока без продвижения.. |
Цитата:
|
.on("click", "#request-form .selected-billboards .unit .close", function(e) { var t = $(this).closest(".unit").attr("data-id"), r = localstorageGet("billboards_ids"); r.splice(r.indexOf(t), 1); var o = $(this); localstorageSet("billboards_ids", r, function() { o.closest(".unit").fadeOut(300, function() { 0 == r.length && a() }) }) Это судя по всему обработчик который удаляет блок. o.closest(".unit").fadeOut(300, function() { 0 == r.length && a() }) Я выделил подозрительный блок, уверен что он удаляет блок? Если уверен то после него сделай еще один пересчет суммы. |
Цитата:
Или я не правильно пересчет сделал.. так я его просто скопировал и заменил имена переменных, которые использую..( o.closest(".unit").fadeOut(300, function() { 0 == r.length && a(); sumDiscount += $(this).html(); sumCost += $(this).html(); }) Попробовал "обнулить" this s - т.е. текущую скидку: o.closest(".unit").fadeOut(300, function() { 0 == r.length && a(); s = $(this).html(0); sumDiscount += $(this).html(); sumCost += $(this).html(); }) Ничего не дало.. видимо, я и тут накосячил :D Это точно блок, который удаляет этот .unit, я анимацию на 3000 поставил - теперь долго пропадает))) |
fadeOut не удаляет, а просто скрывает (плавно)
0 == r.length && a(); - вот это я вообще не знаю что делает, чтобы удалить блок можно написать $(this).remove(); sumDiscount += $(this).html(); sumCost += $(this).html(); Неправильно (что ты добавляешь если блока уже нет?). Пройдись по всем оставшимся блокам, пересчитай сумму и обнови значения. |
Цитата:
localstorageSet("billboards_ids", r, function() { o.closest(".unit").fadeOut(300, function() { $(this).find('select').val('1'); $(this).remove(); }) Т.е. я текущему блоку даю значение 1, а затем его удаляю. И, сама сумма сразу не пересчитывается, НО если поменять в любом другом селекте любое значение - то все считается правильно. Т.е. сейчас просто при удалении блока автоматом не перепрописывается новая сумма.. она высчитывается, видимо, но не прописывается.. |
$(this).find('select').val('1').trigger('change'). end().remove();
|
Цитата:
var g, oldDiscount, newDiscount; oldDiscount = $(this).parents('.list').find('.final-discount span').html(); g = $(this).find('.shield-discount').html(); newDiscount = oldDiscount - g; $(this).find('select').val('1'); $(this).parents('.list').find('.final-discount span').html(newDiscount); $(this).remove(); Ваш вариант маленький, простой.. и блин.. работает как надо :D спасибо)))) |
А не подскажите, как теперь выбранные значения передать, скажем, в почту? У меня при заказе на мной указанную почту приходит сообщение:
<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="utf-8"> </head> <body> <div> @if (isset($org) && $org) <p> Организация: {{ $org }} </p> @endif @if (isset($fio) && $fio) <p> ФИО: {{ $fio }} </p> @endif @if (isset($phone) && $phone) <p> Телефон: {{ $phone }} </p> @endif @if (isset($email) && $email) <p> e-mail: {{ $email }} </p> @endif @if (isset($billboards) && !is_null($billboards) && count($billboards)) <p>Выбранные щиты:</p> @foreach ($billboards as $billboard) <p> <a href="http://{{ $_SERVER['HTTP_HOST'] }}/admin/entity/billboards/{{ $billboard->id }}/edit" target="_blank">{{ $billboard->name }}</a> - @if ($billboard->status == 'free') зарезервировать @elseif ($billboard->status == 'reserved') поставить второй резерв @elseif ($billboard->status == 'blocked') известить, когда освободится @endif </p> @endforeach @endif @if (isset($comment) && $comment) <p> Комментарий к заказу: {{ Helper::nl2br($comment) }} </p> @endif </div> </body> </html> Переменные org, fio, phone, email берутся из введенных пользователем на сайте данных, можно как-то таким же образом передать несколько переменных? В частности, интересуют выбранные val селектов и пара переменных sumCost и sumDiscount, которые у меня отвечают за сумму общую и сумму скидки.. |
Часовой пояс GMT +3, время: 13:20. |