Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 18.07.2016, 11:39
Аспирант
Отправить личное сообщение для Spass Посмотреть профиль Найти все сообщения от Spass
 
Регистрация: 14.07.2016
Сообщений: 86

Если пересчет нужно вести после каждой смены селекта то да, внутри обработчика

Будет чтото вроде:
var summ=0;
$('div.new-price span').each( function(){
summ += $(this).html();
});
Ответить с цитированием
  #12 (permalink)  
Старый 19.07.2016, 09:52
Интересующийся
Отправить личное сообщение для vnmslf Посмотреть профиль Найти все сообщения от vnmslf
 
Регистрация: 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 не удаляется, а лишь скрывается.. или нет? В общем, суть в том, что я никак не могу добиться того, чтобы перед его удалением конкретно его селект уходил в первое значение (тогда все будет правильно считаться)... Помогите пжалста, я разбираюсь, ищу варианты в гугле, но пока без продвижения..
Ответить с цитированием
  #13 (permalink)  
Старый 19.07.2016, 10:12
Интересующийся
Отправить личное сообщение для vnmslf Посмотреть профиль Найти все сообщения от vnmslf
 
Регистрация: 14.07.2016
Сообщений: 12

Сообщение от Spass Посмотреть сообщение
Если пересчет нужно вести после каждой смены селекта то да, внутри обработчика

Будет чтото вроде:
var summ=0;
$('div.new-price span').each( function(){
summ += $(this).html();
});
Спасибо, но это не подойдет. Так он считает, суммирует... но и в моем случае уже все правильно считается, проблема осталась лишь в удалении блока и обнулении его селектов))
Ответить с цитированием
  #14 (permalink)  
Старый 19.07.2016, 11:09
Аспирант
Отправить личное сообщение для Spass Посмотреть профиль Найти все сообщения от Spass
 
Регистрация: 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()
})

Я выделил подозрительный блок, уверен что он удаляет блок?


Если уверен то после него сделай еще один пересчет суммы.
Ответить с цитированием
  #15 (permalink)  
Старый 19.07.2016, 11:43
Интересующийся
Отправить личное сообщение для vnmslf Посмотреть профиль Найти все сообщения от vnmslf
 
Регистрация: 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.
Ответить с цитированием
  #16 (permalink)  
Старый 19.07.2016, 12:29
Аспирант
Отправить личное сообщение для Spass Посмотреть профиль Найти все сообщения от Spass
 
Регистрация: 14.07.2016
Сообщений: 86

fadeOut не удаляет, а просто скрывает (плавно)

0 == r.length && a(); - вот это я вообще не знаю что делает, чтобы удалить блок можно написать $(this).remove();


sumDiscount += $(this).html();
sumCost += $(this).html();

Неправильно (что ты добавляешь если блока уже нет?). Пройдись по всем оставшимся блокам, пересчитай сумму и обнови значения.
Ответить с цитированием
  #17 (permalink)  
Старый 19.07.2016, 12:53
Интересующийся
Отправить личное сообщение для vnmslf Посмотреть профиль Найти все сообщения от vnmslf
 
Регистрация: 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, а затем его удаляю. И, сама сумма сразу не пересчитывается, НО если поменять в любом другом селекте любое значение - то все считается правильно. Т.е. сейчас просто при удалении блока автоматом не перепрописывается новая сумма.. она высчитывается, видимо, но не прописывается..
Ответить с цитированием
  #18 (permalink)  
Старый 19.07.2016, 13:03
Аспирант
Отправить личное сообщение для Spass Посмотреть профиль Найти все сообщения от Spass
 
Регистрация: 14.07.2016
Сообщений: 86

$(this).find('select').val('1').trigger('change'). end().remove();
Ответить с цитированием
  #19 (permalink)  
Старый 19.07.2016, 13:06
Интересующийся
Отправить личное сообщение для vnmslf Посмотреть профиль Найти все сообщения от vnmslf
 
Регистрация: 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();

Ваш вариант маленький, простой.. и блин.. работает как надо спасибо))))
Ответить с цитированием
  #20 (permalink)  
Старый 21.07.2016, 12:09
Интересующийся
Отправить личное сообщение для vnmslf Посмотреть профиль Найти все сообщения от vnmslf
 
Регистрация: 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, которые у меня отвечают за сумму общую и сумму скидки..
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с выпадающим списком JavaScript ursus102 Общие вопросы Javascript 0 16.01.2016 19:30
Java Script, совместная работа textarea с select option Алекс_ Элементы интерфейса 1 12.05.2015 08:13
Выводить значение раньше переменных Гробовщик Общие вопросы Javascript 11 10.09.2013 08:42
Метод для конвертирования едениц px, em, %, pt. jegit Элементы интерфейса 0 07.03.2013 16:15
Как сохранить предыдущее значение select? MaxD Общие вопросы Javascript 3 21.07.2011 12:36