JQuery рассчитать в одной функции - PullRequest
1 голос
/ 21 декабря 2011

У меня есть таблица примерно такая:

sellingprice   cost   postage  profit  paypal   ebayfees   discount    FVF
    ?           49     1.75     4.00     ?         ?           0.2      ?    
    ?           51     1.75     4.00     ?         ?           0.2      ?    

Это различные формулы для решения приведенной выше информации:

sellingpriceresult = стоимость + почтовые расходы + прибыль + PayPal + FVF;
paypalresult = salespriceresult * 0,022 + 0,3;
FVFresult = ebayfees - (ebayfees * скидка);
ebayfeesresult будет использовать, если условие для отображения его результата, что-то вроде этого:

если salespriceresult> 50, то (sellingpriceresult - 50) * 0,05 + 3,5

иначе, если salespriceresult <= 50, тогда sellingpriceresult * 0,07 </p>

Я хочу реализовать вычисления, используя вычисления на стороне клиента. Моя проблема в том, что я не знаю, как объединить все вычисления в одну функцию. Я имею небольшое представление о jQuery и хочу, чтобы вы, ребята, показали мне, как это сделать. Любая помощь будет более ценной.

Вот мой пример кода:

<table border = "0">    
            <tr>
                <td><center>Selling Price</center></td>
                <td><center>Cost</center></td>
                <td><center>Postage</center></td>
                <td><center>Profit</center></td>
                <td><center>Paypal</center></td>
                <td><center>eBay Fees</center></td>
                <td><center>Discount</center></td>
                <td><center>FVF</center></td>
            </tr> 
                <tr>
                    <td>
                        <input type='text' id='sellingprice' name='sellingprice' size='10' readonly='true'/>
                    </td>
                    <td>
                        <input type='text' id='cost' name='cost' size='10' value='$myrow[1]' readonly='true'/>
                    </td>
                    <td>
                        <input type='text' id='postage' name='postage' size='10' value='1.75' readonly='true'/>
                    </td>
                    <td>
                        <input type='text' id='profit' name='profit' size='10' value='4.00' readonly='true'/>
                    </td>
                    <td>
                        <input type='text' id='paypal' name='paypal' size='10' readonly='true'/>
                    </td>
                    <td>
                        <input type='text' id='ebayfees' name='ebayfees' size='10' readonly='true'/>
                    </td>
                    <td>
                        <input type='text' id='discount' name='discount' size='10' value='0.2' readonly='true'/>
                    </td>
                    <td>
                        <input type='text' id='fvf' name='fvf' size='10' readonly='true'/>
                    </td>
                </tr>   
        </table>

    <script>

        $(document).ready(function(){
            $('tr').each(function(){
            var sellingprice = 0;
            $(this).find("input[name=cost],input[name=postage],input[name=profit],input[name=paypal],input[name=fvf]").each(function(){
                sellingprice += (+$(this).val());
            });
            $(this).find("input[name=sellingprice]").val(sellingprice).css("background-color", "yellow");
            });     
        });

        $(document).ready(function(){   
            $('tr').each(function(){
            var paypal = 0;
            $(this).find("input[name=sellingprice]").each(function(){
                paypal = (+$(this).val()) * 0.022 + 0.3;
                paypal = paypal.toFixed(2);
            });
            $(this).find("input[name=paypal]").val(paypal).css("background-color", "yellow");
            }); 
        });


        $(document).ready(function(){
            $('tr').each(function(){
            var sellingprice = 0;
            $(this).find("input[name=cost],input[name=postage],input[name=profit],input[name=paypal],input[name=fvf]").each(function(){
                sellingprice = (+$(this).val());
                sellingprice = sellingprice.toFixed(2);
            });
            $(this).find("input[name=sellingprice]").val(sellingprice).css("background-color", "yellow");
            });     
        });

        $(document).ready(function(){
            $('tr').each(function(){
            var fvf = 0;
            $(this).find("input[name=ebayfees],input[name=discount]").each(function(){
                fvf = (+$(this).val());
            });
            $(this).find("input[name=fvf]").val(fvf).css("background-color", "yellow");
            }); 
        });


        $(document).ready(function(){
            $('tr').each(function(){
            var sellingprice = 0;
            $(this).find("input[name=cost],input[name=postage],input[name=profit],input[name=paypal],input[name=fvf]").each(function(){
                sellingprice += (+$(this).val());
            });
            $(this).find("input[name=sellingprice]").val(sellingprice).css("background-color", "yellow");
            });
        });

        $(document).ready(function(){
            $('tr').each(function() {
                var sellingpriceResult = parseFloat($(this).find("input[name=sellingprice]").val());

                var result = 0;
                if (sellingpriceResult > 50) { 
                    result = (sellingpriceResult - 50) * 0.05 + 3.5;
                    result = result.toFixed(2);
                }
                else {
                    result = sellingpriceResult * 0.07;
                    result = result.toFixed(2);
                }
                $(this).find("input[name=ebayfees]").val(result).css("background-color", "yellow");
            });
        });
    </script>

1 Ответ

0 голосов
/ 21 декабря 2011

Примечание 1 : я предполагаю, что будет несколько строк, поэтому вы должны удалить атрибуты ID из ваших входных данных, поскольку идентификатор должен быть уникальным в документе HTML.

Примечание 2 : Я не уверен, что полностью понимаю расчет, который вы хотите сделать. «Цена продажи» зависит от «FVF», «FVF» зависит от «сборов Ebay», а «сборы Ebay» зависят от «цены продажи» ... Мне кажется, что рассчитать с помощью этой рекурсивной зависимости немного невозможно

Примечание 3 : Вы используете элемент insertionfee в своем примере, но я не в предоставленной вами разметке.

Некоторые примечания к следующему коду:

  • получить объект jquery для текущего <tr> для повторного использования с $this = $(this)

  • Найдите все необходимые элементы для повторного использования. кроме того, это более эффективно благодаря $this

  • делая это $item.val(myvariable = 1+1) фактически сохраняет вычисление в myvariable и передает его .val()

  • это condition ? <if condition true> : <if condition false> позволяет делать встроенные условные операторы

  • я не смог использовать .toFixed(2), думаю, это ваша функция

Я сделал jsfiddle , чтобы вы могли его увидеть.

$(document).ready(function() {

    $('tr').each(function() {

        var $this = $(this),
            $sellingprice = $this.find('[name=sellingprice]'),
            $cost = $this.find('[name=cost]'),
            $postage = $this.find('[name=postage]'),
            $profit = $this.find('[name=profit]'),
            $paypal = $this.find('[name=paypal]'),
            $ebayfees = $this.find('[name=ebayfees]'),
            $discount = $this.find('[name=discount]'),
            $fvf = $this.find('[name=fvf]');

        var selpriceresult, paypalresult, fvfresult, ebayresult;

        $sellingprice.val((selpriceresult = $cost.val() + $postage.val() + $paypal.val() + $fvf.val()));
        $paypal.val(paypalresult = selpriceresult * 0.022 + 0.3);

        $ebayfees.val(ebayresult = selpriceresult > 50
                        ? (selpriceresult - 50) * 0.05 + 3.5
                        : selpriceresult * 0.07);

        $fvf.val(fvfresult = ebayresult - (ebayresult - $discount.val()));

});



О формулах

Я проверил файл Excel. Это не так просто, как кажется. Формулы имеют зависимости, и я понятия не имею, как Excel действительно выполняет вычисления внутри.

Я знаю, что Excel создает и оптимизирует Дерево зависимостей , чтобы определить, как оно должно выполнять вычисления рабочей книги. Вы можете визуализировать зависимости и отношения между ячейками (Инструменты> Аудит), но я не гуру Excel, и это совершенно не в моих знаниях.

Я думаю, что это также немного выходит за рамки этого вопроса - который должен был объединить блоки кода jquery в один, а не конвертировать формул Excel в вычисления javascript.

Я действительно хочу помочь вам с расчетами, но я просто не могу. Вы можете задать другой вопрос по этому конкретному вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...