像计算器一样计算内部输入

时间:2016-04-20 21:25:10

标签: jquery

在没有显示计算器的情况下,我正在设置一个jQuery函数来直接在输入中计算它的类型。我很接近,加法例程正常工作。减法有点古怪,因为我试图输入测试数据,但它并没有完全流动。

这是小提琴 - https://jsfiddle.net/Lusaj8kc/4/

因此,当我键入15 + 5 + 7 +时,我得到了27的答案。我的加号键运行请求的操作有点不按顺序。由于它会自动显示结果,因此不需要输入密钥,我想将回车键挂钩到表单提交中。

如果我输入15 + 5 - 7我将需要再次按 - 并导致3从第一个15减去5。 我需要输入15 + 5 + 7 - 才能获得13

我怎么能让这个表现更多的计算器?类似于内置的Windows计算器。这将是简单的货币计算,所以不要为了简单而允许乘法和除法或其他。

(function ($) {
    $.fn.calcInMyBox = function (options) {
        var settings = $.extend({
            decimalPlaces: 2
        }, options);

        return this.each(function () {
            var calcHolder = 0.00;
            var calcDisplay = "";

            $(this).keypress(function (e) {
                //Prevent letters from being entered
                var regex = new RegExp("^[0-9\.]+$");
                var key = String.fromCharCode(!e.charCode ? e.which : e.charCode);
                if (!regex.test(key)) { e.preventDefault(); return false; }
            });

            $(this).keydown(function (e) {
                if (e.which == 27) {
                    //Escape Key To Clear
                    calcHolder = 0.00;
                    calcDisplay = "";
                    $(".CalculatorData").html("");
                    $(this).val(calcHolder.toFixed(settings.decimalPlaces)).select();
                }
                if (e.which == 107) {
                    //Add Value
                    calcHolder = Number(this.value) + calcHolder;
                    $(".CalculatorData").html(calcDisplay + this.value + " + ");
                }
                else if (e.which == 109) {
                    //Subtract Value
                    calcHolder = calcHolder - Number(this.value);
                    $(".CalculatorData").html(calcDisplay + this.value + " - ");
                }
                if (e.which == 107 || e.which == 109) {
                    calcDisplay = $(".CalculatorData").html();
                    $(this).val(calcHolder.toFixed(settings.decimalPlaces)).select();
                    console.log(calcHolder);
                }
            });

        });
    };
})(jQuery);

$(".jqNewAmount").calcInMyBox({ decimalPlaces: 2});

更新: https://jsfiddle.net/Lusaj8kc/6/ 能够根据Davids建议实施eval。它将操作置于输入之外,并对该数据进行检测,将答案记录到输入中。添加了选项卡并输入密钥计算。

2 个答案:

答案 0 :(得分:2)

您是否可以像这样使用eval



var $eq = $('#eq');
var $ans = $('#ans');

$eq.keyup(function(e) {
  try{
    var ans = eval($eq.val()).toFixed(2);
    $ans.val(ans);
  } catch(e) { $ans.val(''); }
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Equation: <input id="eq" />
<br>
Answer: <input id="ans"/>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

David784的回答非常正确。可以考虑添加可能抛出的错误消息,并且将继续执行控制台上的消息。然后用户输入仍然是垃圾。此外,可以显示添加“请输入数字”消息而不是他建议的空白。但是,David784在期待用户输入一个数字并且不解释它时达到了标记。 javascript函数.toFixed()完成剩下的工作了!