jQuery在一个函数中计算

时间:2011-12-21 07:39:22

标签: jquery if-statement

我有一张像这样的表:

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

这是解决上述信息的不同公式:

sellpriceresult =成本+邮资+利润+ paypal + FVF;
paypalresult = sellpriceresult * 0.022 + 0.3;
FVFresult = ebayfees - (ebayfees * discount);
ebayfeesresult 将使用if条件显示结果,如下所示:

如果sellpriceresult> 50然后(sellpriceresult - 50)* 0.05 + 3.5

否则,如果sellpriceresult< = 50则售卖价格* 0.07

我想使用客户端计算实现计算。我的问题是我不知道如何在一个函数中组合所有计算。我对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 :(得分:0)

注1 :我猜测会有几行,因此您必须从输入中删除ID属性,因为ID在HTML文档中必须是唯一的。

注意2 :我不确定完全理解您想要进行的计算。 “卖价”取决于“FVF”,“FVF”取决于“Ebay费用”和“Ebay费用”取决于“卖价”......似乎有点不可能用这种递归依赖来计算

注意3 :您在示例中使用的是insertionfee元素,但我不在您提供的标记中。

以下代码的一些注释:

  • 获取当前<tr>的jquery对象,以便与$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构建并优化依赖关系树以确定它应如何执行工作簿的计算。您可以对依赖关系和单元格之间的关系进行排序(工具&gt;审核),但我不是一个优秀的专家,而且完全出于我的知识。

我认为这也有点超出了这个问题的范围 - 将jquery代码块合并为一个,而不是转换 excel公式到javascript计算。

我非常愿意帮助你进行计算,但我不能。您可以询问有关此特定主题的其他问题。