Если пересчет нужно вести после каждой смены селекта то да, внутри обработчика
Будет чтото вроде:
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, время: 22:10. |