与try..catch
_eval()
我在JSFiddle上创建了一个不安全的示例,它可以满足您的要求,但不是在插入符号仍在输入框上时等待结果,而是附加到blur
事件,以便在您将焦点切换到控件之外时评估值。
它的作用是这样的:
$("input").blur(function(evt) {
try {
var val = eval(this.value);
this.value = val;
}
catch (e) {}
});
它尝试评估输入框的内容,如果能够这样做,则将内容替换为结果。这意味着你可以向它扔任何东西,只要eval
能咀嚼它。
我说不安全,因为代码没有检查任何可能导致黑洞吞噬宇宙的内容...... ;)
例子
1 + 2 * 3
会变7
universe
会留下它作为宇宙
010+1
将更改为9(因此它也可以使用八进制)
0xf *2 +3
将返回33(看起来也是十六进制)
- 等等
实施您的方式以使其更安全
这当然只是一个开始。如果您希望x成为乘数,则必须在输入字符串中进行一些替换,而我的示例没有这样做。但这样做非常简单。
如果您只想进行特定的计算也是如此,因此您不允许创建对象或日期或任何东西......
在您的情况下可能不受欢迎的一个示例是,如果您输入
alert(new Date())
它当然会执行此代码并显示一个警告框。是否允许这样做取决于您。如果您要将原始数据发布到服务器,您当然希望严格清理输入。