18.07.2016, 11:39
|
Аспирант
|
|
Регистрация: 14.07.2016
Сообщений: 86
|
|
Если пересчет нужно вести после каждой смены селекта то да, внутри обработчика
Будет чтото вроде:
var summ=0;
$('div.new-price span').each( function(){
summ += $(this).html();
});
|
|
19.07.2016, 09:52
|
Интересующийся
|
|
Регистрация: 14.07.2016
Сообщений: 12
|
|
На данный момент пришел к тому, что:
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 не удаляется, а лишь скрывается.. или нет? В общем, суть в том, что я никак не могу добиться того, чтобы перед его удалением конкретно его селект уходил в первое значение (тогда все будет правильно считаться)... Помогите пжалста, я разбираюсь, ищу варианты в гугле, но пока без продвижения..
|
|
19.07.2016, 10:12
|
Интересующийся
|
|
Регистрация: 14.07.2016
Сообщений: 12
|
|
Сообщение от Spass
|
Если пересчет нужно вести после каждой смены селекта то да, внутри обработчика
Будет чтото вроде:
var summ=0;
$('div.new-price span').each( function(){
summ += $(this).html();
});
|
Спасибо, но это не подойдет. Так он считает, суммирует... но и в моем случае уже все правильно считается, проблема осталась лишь в удалении блока и обнулении его селектов))
|
|
19.07.2016, 11:09
|
Аспирант
|
|
Регистрация: 14.07.2016
Сообщений: 86
|
|
.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()
})
Я выделил подозрительный блок, уверен что он удаляет блок?
Если уверен то после него сделай еще один пересчет суммы.
|
|
19.07.2016, 11:43
|
Интересующийся
|
|
Регистрация: 14.07.2016
Сообщений: 12
|
|
Сообщение от Spass
|
.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()
})
Я выделил подозрительный блок, уверен что он удаляет блок?
Если уверен то после него сделай еще один пересчет суммы.
|
Сделал, эффекта нет, наверное потому, что этот пересчете никак не связан с функцией на change, этот же блок снаружи находится.. Можно его как-то "связать"?
Или я не правильно пересчет сделал.. так я его просто скопировал и заменил имена переменных, которые использую..(
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();
})
Ничего не дало.. видимо, я и тут накосячил
Это точно блок, который удаляет этот .unit, я анимацию на 3000 поставил - теперь долго пропадает)))
Последний раз редактировалось vnmslf, 19.07.2016 в 11:52.
|
|
19.07.2016, 12:29
|
Аспирант
|
|
Регистрация: 14.07.2016
Сообщений: 86
|
|
fadeOut не удаляет, а просто скрывает (плавно)
0 == r.length && a(); - вот это я вообще не знаю что делает, чтобы удалить блок можно написать $(this).remove();
sumDiscount += $(this).html();
sumCost += $(this).html();
Неправильно (что ты добавляешь если блока уже нет?). Пройдись по всем оставшимся блокам, пересчитай сумму и обнови значения.
|
|
19.07.2016, 12:53
|
Интересующийся
|
|
Регистрация: 14.07.2016
Сообщений: 12
|
|
Сообщение от Spass
|
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, а затем его удаляю. И, сама сумма сразу не пересчитывается, НО если поменять в любом другом селекте любое значение - то все считается правильно. Т.е. сейчас просто при удалении блока автоматом не перепрописывается новая сумма.. она высчитывается, видимо, но не прописывается..
|
|
19.07.2016, 13:03
|
Аспирант
|
|
Регистрация: 14.07.2016
Сообщений: 86
|
|
$(this).find('select').val('1').trigger('change'). end().remove();
|
|
19.07.2016, 13:06
|
Интересующийся
|
|
Регистрация: 14.07.2016
Сообщений: 12
|
|
Сообщение от Spass
|
$(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();
Ваш вариант маленький, простой.. и блин.. работает как надо спасибо))))
|
|
21.07.2016, 12:09
|
Интересующийся
|
|
Регистрация: 14.07.2016
Сообщений: 12
|
|
А не подскажите, как теперь выбранные значения передать, скажем, в почту? У меня при заказе на мной указанную почту приходит сообщение:
<!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, которые у меня отвечают за сумму общую и сумму скидки..
|
|
|
|