在没有显示计算器的情况下,我正在设置一个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。它将操作置于输入之外,并对该数据进行检测,将答案记录到输入中。添加了选项卡并输入密钥计算。
答案 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;
答案 1 :(得分:0)
David784的回答非常正确。可以考虑添加可能抛出的错误消息,并且将继续执行控制台上的消息。然后用户输入仍然是垃圾。此外,可以显示添加“请输入数字”消息而不是他建议的空白。但是,David784在期待用户输入一个数字并且不解释它时达到了标记。 javascript函数.toFixed()完成剩下的工作了!