实时计算基于输入和单击的单选按钮

时间:2017-02-10 17:54:06

标签: javascript jquery html

我想基于交易创建Net-Profit的实时计算器,以给定的买卖价格给定数量,并且它有2个单选按钮作为输入。

发生的事情是,我必须在输入值并选择按钮后按Enter键。

我想要的是,只要我输入数值并选择单选按钮,它就应该计算出值。

Pl帮助我纠正我的代码。

<!DOCTYPE html>
<html>
<meta charset="utf-8">
<title>Brokerage Calculator</title>
<head>
    <script src="jquery-min.js"></script>
</head>
<body>
Buy Price
<input type="number" min="0" id="bp"><br /> 
Sell Price
<input type="number" min="0" id="sp"><br /> 
Qty:
<input type="number" min="0" id="qty"><br /> 
NSE: 
<input name="exchname" id="nse" value="0.0000325" type="radio"  checked="checked"><br />
BSE: 
<input name="exchname" id="bse" value="0.0000275" type="radio"><br />
Turnover:
<span id="turnover">0</span><br /> 
Brokerage:
<span id="brokerage">0</span><br />
Security Transction Tax:
<span id="stt">0</span><br />
Total Tran Charges:
<span id="ttc">0</span><br />
SEBI Charges:
<span id="sebi">0</span><br />
Service Tax:
<span id="servtax">0</span><br />
Stamp Duty:
<span id="std">0</span><br />
Total Brokerage + Taxes:
<span id="ttx">0</span><br />
Net Profit:
<span id="pnl">0</span><br />

<script>

$('input').keyup(function(){ // run anytime the value changes

    var buyPrice = parseFloat($('#bp').val()); // get value of field
    var sellPrice = parseFloat($('#sp').val()); // convert it to a float
    var quantity = parseFloat($('#qty').val());
    var turnoverValue = (buyPrice + sellPrice) * quantity;
    var sttValue = sellPrice * quantity * 0.025 / 100;
    var sebiValue = turnoverValue * 0.0002 / 100;

    var stdValue = 0.00002 * turnoverValue;
    var excrate = document.querySelector('input[name="exchname"]:checked').value;

    if(buyPrice<166.67){
        var brkgbp = 0.05;
    } else {
            var brkgbp = buyPrice * 0.03 / 100;
    }

    if(sellPrice<166.67){
        var brkgsp = 0.05;
    } else {
            var brkgsp = sellPrice * 0.03 / 100;
    }

    var brokerageValue = (brkgbp + brkgsp) * quantity;
    var ttcValue = excrate * turnoverValue;
    var servtaxValue = (brokerageValue + ttcValue + sebiValue) * 15 / 100;
    var ttxValue = brokerageValue + sttValue + ttcValue + sebiValue + servtaxValue + stdValue;
    var pnlValue = ((sellPrice - buyPrice) * quantity) - ttxValue;
    $('#turnover').html(turnoverValue.toFixed(2));
    $('#brokerage').html(brokerageValue.toFixed(2));
    $('#stt').html(sttValue.toFixed(2));
    $('#sebi').html(sebiValue.toFixed(2));
    $('#servtax').html(servtaxValue.toFixed(2));
    $('#ttc').html(ttcValue.toFixed(2));
    $('#std').html(stdValue.toFixed(2));
    $('#ttx').html(ttxValue.toFixed(2));
    $('#pnl').html(pnlValue.toFixed(2));
});

<script>
</body>
</html>

3 个答案:

答案 0 :(得分:1)

您是否忘记关闭脚本标记?

<script> ... </script>

另外,使用

var buyPrice = parseFloat($('#bp').val()) || 0;

使用默认值进行初始化,因此您无法获得NaN

如果您希望在单选按钮中重新选择选项时更改值,请使用:

function calculate(){ // run anytime the value changes
    ....
}
$('input').on('keyup', calculate);
$('input').on('click', calculate);
编辑:我做了一个JSfiddle

https://jsfiddle.net/v3qd7b26/

答案 1 :(得分:1)

代码中的多个问题

1。您在最后的脚本标记中缺少/。它应该是</script>而不是<script>

2. 您需要确保输入的值只是有效数字,然后才能继续进行,您可以在javascript中使用isNaN函数进行验证

if(!isNaN(buyPrice) && !isNaN(sellPrice) && !isNaN(quantity)){

第3 另外,对于复选框,需要添加另一个选择器。所以你可以创建一个通用函数并调用它。

$("input").keyup(calculate);
$("input:checked").keyup(calculate);

完整代码:

$("input").keyup(calculate);
$("input:checked").keyup(calculate);

function calculate(){ // run anytime the value changes
 
  
  
    var buyPrice = parseFloat($('#bp').val()); // get value of field
    var sellPrice = parseFloat($('#sp').val()); // convert it to a float
    var quantity = parseFloat($('#qty').val());
  if(!isNaN(buyPrice) && !isNaN(sellPrice) && !isNaN(quantity)){
  
    var turnoverValue = (buyPrice + sellPrice) * quantity;
    var sttValue = sellPrice * quantity * 0.025 / 100;
    var sebiValue = turnoverValue * 0.0002 / 100;

    var stdValue = 0.00002 * turnoverValue;
    var excrate = document.querySelector('input[name="exchname"]:checked').value;

    if(buyPrice<166.67){
        var brkgbp = 0.05;
    } else {
            var brkgbp = buyPrice * 0.03 / 100;
    }

    if(sellPrice<166.67){
        var brkgsp = 0.05;
    } else {
            var brkgsp = sellPrice * 0.03 / 100;
    }

    var brokerageValue = (brkgbp + brkgsp) * quantity;
    var ttcValue = excrate * turnoverValue;
    var servtaxValue = (brokerageValue + ttcValue + sebiValue) * 15 / 100;
    var ttxValue = brokerageValue + sttValue + ttcValue + sebiValue + servtaxValue + stdValue;
    var pnlValue = ((sellPrice - buyPrice) * quantity) - ttxValue;
    $('#turnover').html(turnoverValue.toFixed(2));
    $('#brokerage').html(brokerageValue.toFixed(2));
    $('#stt').html(sttValue.toFixed(2));
    $('#sebi').html(sebiValue.toFixed(2));
    $('#servtax').html(servtaxValue.toFixed(2));
    $('#ttc').html(ttcValue.toFixed(2));
    $('#std').html(stdValue.toFixed(2));
    $('#ttx').html(ttxValue.toFixed(2));
    $('#pnl').html(pnlValue.toFixed(2));
    }
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Buy Price
<input type="number" min="0" id="bp"><br /> 
Sell Price
<input type="number" min="0" id="sp"><br /> 
Qty:
<input type="number" min="0" id="qty"><br /> 
NSE: 
<input name="exchname" id="nse" value="0.0000325" type="radio"  checked="checked"><br />
BSE: 
<input name="exchname" id="bse" value="0.0000275" type="radio"><br />
Turnover:
<span id="turnover">0</span><br /> 
Brokerage:
<span id="brokerage">0</span><br />
Security Transction Tax:
<span id="stt">0</span><br />
Total Tran Charges:
<span id="ttc">0</span><br />
SEBI Charges:
<span id="sebi">0</span><br />
Service Tax:
<span id="servtax">0</span><br />
Stamp Duty:
<span id="std">0</span><br />
Total Brokerage + Taxes:
<span id="ttx">0</span><br />
Net Profit:
<span id="pnl">0</span><br />

答案 2 :(得分:1)

您的结束脚本标记缺少/,即</script>

对于您的输入,您要检查键盘键的释放,键盘键不会因点击单选按钮而触发。由于您要检查输入的值是否已更改,因此您应将$('input').keyup更改为$('input').change

编辑当然,你也应该像其他答案一样进行NaN检查 - 但是你所描述的问题是通过使用change事件来解决的。