Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.05.2017, 22:03
Новичок на форуме
Отправить личное сообщение для movingToJS Посмотреть профиль Найти все сообщения от movingToJS
 
Регистрация: 21.05.2017
Сообщений: 3

Вернуть переменные из функции и сложить их
Доброго, друзья.

Сделал я такого монстра:
function productCalc(a, b, c, d, e, f, g, h, i, j, k, l, m, n) {
    $("#lumbersCartForm input").on("ifChanged change", function(event) {
        if ($(a + " .Wet").is(':checked')) {
            if ($(a + " .Retail").is(':checked')) {
                if ($(a + " .IsMeter").is(':checked')) {
                    var itemPrice = b;
                } else if ($(a + " .IsPcs").is(':checked')) {
                    itemPrice = c;
                }

                var itemTotal = itemPrice * d.val();

                $(a + " .price span").text(itemTotal);
                $(a + " .price input[type='hidden']").val(itemTotal);

            } else if ($(a + " .Wholesale").is(':checked')) {
                if ($(a + " .IsMeter").is(':checked')) {
                    itemPrice = e;
                } else if ($(a + " .IsPcs").is(':checked')) {
                    itemPrice = f;
                }

                itemTotal = itemPrice * d.val();

                $(a + " .price span").text(itemTotal);
                $(a + " .price input[type='hidden']").val(itemTotal);
            };

            $("#cart tbody ." + g + " .humidity").html('Option 1 - Value 1');
        };

        if ($(a + " .Dry").is(':checked')) {
            if ($(a + " .Retail").is(':checked')) {
                if ($(a + " .IsMeter").is(':checked')) {
                    itemPrice = h;
                } else if ($(a + " .IsPcs").is(':checked')) {
                    itemPrice = i;
                };

                itemTotal = itemPrice * d.val();

                $(a + " .price span").text(itemTotal);
                $(a + " .price input[type='hidden']").val(itemTotal);

            } else if ($(a + " .Wholesale").is(':checked')) {
                if ($(a + " .IsMeter").is(':checked')) {
                    itemPrice = j;
                } else if ($(a + " .IsPcs").is(':checked')) {
                    itemPrice = k;
                }

                itemTotal = itemPrice * d.val();

                $(a + " .price span").text(itemTotal);
                $(a + " .price input[type='hidden']").val(itemTotal);
            };

            $("#cart tbody ." + g + " .humidity").html('Option 1 - Value 2');
        };

        if ($(a + " .IsMeter").is(':checked')) {
            var itemQtyType = "Option 3 - Value 1",
                itemVolTotal = parseFloat(d.val(), 10);
        } else {
            itemVolTotal = parseFloat((l * d.val()).toFixed(2), 10);
            itemQtyType = "Option 3 - Value 2";
        };

        if (!$(a + " .Add").is(":checked")) {
            itemTotal = 0;
            itemVolTotal = 0;
        };

        if ($(a + ' .Add').is(':checked')) {
            if (!$("#cart tbody ." + g).length) {
                $("#cart tbody #profiledBeams").after(' <tr class="' + g + '">\
																<td>' + m + '</td>\
																<td class="humidity">' + n + '</td>\
																<td class="qty">' + d.val() + itemQtyType + '</td>\
																<td class="price">' + $(a + " .price input[type='hidden']").val() + '</td>\
															</tr> ');
            };

        } else {
            $('.' + g).remove();
            $(a + " .price input[type='hidden']").val(0);
        };

        $("#cart tbody ." + g + " .qty").html(d.val() + itemQtyType);
        $("#cart tbody ." + g + " .price").html($(a + " .price input[type='hidden']").val());
    });

    function addToCart() {
        $(a + " .btnAdd").on('click', function() {
            if ($(this).hasClass('added')) {
                $(a + " .Add").prop("checked", false).change();
                $(this).toggleClass('added btn-danger').text('Add to cart');
                $(this).parent().siblings('.price').find('input').val(0);
            } else {
                $(a + " .Add").prop("checked", true).change();
                $(this).toggleClass('added btn-danger').text('Remove');
            };
        });
    };

    addToCart();
};


Передаю в нее товары:
// Product 1
var itemSelector = '#item', // a
    qtySelector = $('input[name="itemQty"]'), // d
    cartItemSelector = 'cartItem', // g
    itemTitle = $("input[name='itemAdd']").val(), // m
    itemHumidity = $(itemSelector + " input[name='itemHumidity']").val(), // n

    price1 = 8500, // b
    price2 = 765, // c
    price3 = 8300, // e
    price4 = 747, // f
    price5 = 10500, // h
    price6 = 945, // i
    price7 = 10000, // j
    price8 = 900, // k

    pcsInMeter = 0.09; // l

productCalc(itemSelector, price1, price2, qtySelector, price3, price4, cartItemSelector, price5, price6, price6, price8, pcsInMeter, itemTitle, itemHumidity);

// Product 2
var itemSelector = '#item2', // a
    qtySelector = $('input[name="item2Qty"]'), // d
    cartItemSelector = 'cartItem2', // g
    itemTitle = $("input[name='item2Add']").val(), // m
    itemHumidity = $(itemSelector + " input[name='item2Humidity']").val(), // n

    price1 = 8500, // b
    price2 = 1148, // c
    price3 = 8300, // e
    price4 = 1121, // f
    price5 = 10500, // h
    price6 = 1418, // i
    price7 = 10000, // j
    price8 = 1350, // k

    pcsInMeter = 0.135; // l

productCalc(itemSelector, price1, price2, qtySelector, price3, price4, cartItemSelector, price5, price6, price6, price8, pcsInMeter, itemTitle, itemHumidity);


И все работает, не смотря ни на что
Не могу только понять, каким образом вытащить данные о цене товара после всех калькуляций. Внутри функции это переменная
Код:
itemTotal
, а как ее поймать извне? И вопрос номер 2: как это реализовать, чтобы посчитать сумму добавленных в корзину товаров?
Фиддл для наглядности https://jsfiddle.net/r5pu6csk/3/

Пардон, не нашел тут спойлера.

Последний раз редактировалось movingToJS, 21.05.2017 в 23:02.
Ответить с цитированием
  #2 (permalink)  
Старый 21.05.2017, 22:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

movingToJS,
var total = [],
    z = 0;

function tot(itemTotal, index) {
    total[index] = itemTotal;
    var sum = total.reduce(function(a, b) {
        return a + b
    }, 0);
    $(".allTotal span").html(sum)
}

function productCalc(a, b, c, d, e, f, g, h, i, j, k, l, m, n, z) {
    $("#lumbersCartForm input").on("ifChanged change", function(event) {
        if ($(a + " .Wet").is(":checked")) {
            if ($(a + " .Retail").is(":checked")) {
                if ($(a + " .IsMeter").is(":checked")) var itemPrice = b;
                else if ($(a + " .IsPcs").is(":checked")) itemPrice = c;
                var itemTotal = itemPrice * d.val();
                $(a + " .price span").text(itemTotal);
                $(a + " .price input[type='hidden']").val(itemTotal)
            } else if ($(a + " .Wholesale").is(":checked")) {
                if ($(a + " .IsMeter").is(":checked")) itemPrice = e;
                else if ($(a +
                        " .IsPcs").is(":checked")) itemPrice = f;
                itemTotal = itemPrice * d.val();
                $(a + " .price span").text(itemTotal);
                $(a + " .price input[type='hidden']").val(itemTotal)
            }
            $("#cart tbody ." + g + " .humidity").html("Option 1 - Value 1")
        }
        if ($(a + " .Dry").is(":checked")) {
            if ($(a + " .Retail").is(":checked")) {
                if ($(a + " .IsMeter").is(":checked")) itemPrice = h;
                else if ($(a + " .IsPcs").is(":checked")) itemPrice = i;
                itemTotal = itemPrice * d.val();
                $(a + " .price span").text(itemTotal);
                $(a + " .price input[type='hidden']").val(itemTotal)
            } else if ($(a +
                    " .Wholesale").is(":checked")) {
                if ($(a + " .IsMeter").is(":checked")) itemPrice = j;
                else if ($(a + " .IsPcs").is(":checked")) itemPrice = k;
                itemTotal = itemPrice * d.val();
                $(a + " .price span").text(itemTotal);
                $(a + " .price input[type='hidden']").val(itemTotal)
            }
            $("#cart tbody ." + g + " .humidity").html("Option 1 - Value 2")
        }
        if ($(a + " .IsMeter").is(":checked")) var itemQtyType = "Option 3 - Value 1",
            itemVolTotal = parseFloat(d.val(), 10);
        else {
            itemVolTotal = parseFloat((l * d.val()).toFixed(2), 10);
            itemQtyType = "Option 3 - Value 2"
        }
        tot(itemTotal,
            z);
        if (!$(a + " .Add").is(":checked")) {
            itemTotal = 0;
            itemVolTotal = 0
        }
        if ($(a + " .Add").is(":checked")) {
            if (!$("#cart tbody ." + g).length) $("#cart tbody #profiledBeams").after(' <tr class="' + g + '">                                <td>' + m + '</td>                                <td class="humidity">' + n + '</td>                                <td class="qty">' + d.val() + itemQtyType + '</td>                                <td class="price">' + $(a + " .price input[type='hidden']").val() + "</td>                              </tr> ")
        } else {
            $("." +
                g).remove();
            $(a + " .price input[type='hidden']").val(0)
        }
        $("#cart tbody ." + g + " .qty").html(d.val() + itemQtyType);
        $("#cart tbody ." + g + " .price").html($(a + " .price input[type='hidden']").val())
    });

    function addToCart() {
        $(a + " .btnAdd").on("click", function() {
            if ($(this).hasClass("added")) {
                $(a + " .Add").prop("checked", false).change();
                $(this).toggleClass("added btn-danger").text("Add to cart");
                $(this).parent().siblings(".price").find("input").val(0)
            } else {
                $(a + " .Add").prop("checked", true).change();
                $(this).toggleClass("added btn-danger").text("Remove")
            }
        })
    }
    addToCart()
}
var itemSelector = "#item",
    qtySelector = $('input[name="itemQty"]'),
    cartItemSelector = "cartItem",
    itemTitle = $("input[name='itemAdd']").val(),
    itemHumidity = $(itemSelector + " input[name='itemHumidity']").val(),
    price1 = 8500,
    price2 = 765,
    price3 = 8300,
    price4 = 747,
    price5 = 10500,
    price6 = 945,
    price7 = 1E4,
    price8 = 900,
    pcsInMeter = .09;
productCalc(itemSelector, price1, price2, qtySelector, price3, price4, cartItemSelector, price5, price6, price6, price8, pcsInMeter, itemTitle, itemHumidity, z++);
var itemSelector = "#item2",
    qtySelector = $('input[name="item2Qty"]'),
    cartItemSelector = "cartItem2",
    itemTitle = $("input[name='item2Add']").val(),
    itemHumidity = $(itemSelector + " input[name='item2Humidity']").val(),
    price1 = 8500,
    price2 = 1148,
    price3 = 8300,
    price4 = 1121,
    price5 = 10500,
    price6 = 1418,
    price7 = 1E4,
    price8 = 1350,
    pcsInMeter = .135;
productCalc(itemSelector, price1, price2, qtySelector, price3, price4, cartItemSelector, price5, price6, price6, price8, pcsInMeter, itemTitle, itemHumidity, z++);
Ответить с цитированием
  #3 (permalink)  
Старый 21.05.2017, 22:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от movingToJS
не нашел тут спойлера.
параметр hide в тег форматирования
[HTML run hide]код страницы целиком[/HTML]


Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #4 (permalink)  
Старый 22.05.2017, 08:41
Новичок на форуме
Отправить личное сообщение для movingToJS Посмотреть профиль Найти все сообщения от movingToJS
 
Регистрация: 21.05.2017
Сообщений: 3

Спасибо, то, что нужно.
Ответить с цитированием
  #5 (permalink)  
Старый 22.05.2017, 10:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от movingToJS
$(a + " .price span").text(itemTotal); $(a + " .price input[type='hidden']").val(itemTotal);
подумайте если хотите, а нельзя эти строки написать всего 1 раз.
Ответить с цитированием
  #6 (permalink)  
Старый 22.05.2017, 12:35
Новичок на форуме
Отправить личное сообщение для movingToJS Посмотреть профиль Найти все сообщения от movingToJS
 
Регистрация: 21.05.2017
Сообщений: 3

Там есть вещи пострашнее, как то:
$(a + " .price input[type='hidden']").val(0);
...
$(this).siblings('[type="hidden"]').val(0);


Буквально одно и то же .

Как раз этим и занимаюсь.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вернуть данные с функции balbojek Общие вопросы Javascript 1 23.10.2015 14:14
текстовые переменные в функции Georgiy_M Общие вопросы Javascript 10 25.03.2014 23:34
Как вернуть результат из ajax внутри функции? Rooner AJAX и COMET 4 29.03.2013 19:15
как из функции вернуть не сколько результатов. Telnet Общие вопросы Javascript 1 04.07.2011 09:43
как из функции вернуть не сколько результатов. Telnet Общие вопросы Javascript 1 02.07.2011 20:02