1

我不知道为什么我在搜索这个时遇到了这么多麻烦,看起来很容易,但我找不到任何信息。

基本上,我希望根据字段中的数字来更新我的 ASP.net 表单上的控件。

因此,如果我有 0x0= 它会显示 0,如果我将数字更改为 5x5= 它会自动显示 25(一旦我完成输入)

编辑:我真的没有一个好的代码示例,这是我想要的一个示例。

<asp:textbox></asp:textbox>X<asp:textbox></asp:textbox> = <asp:label text="value of the last two being changed dynamically" />
4

4 回答 4

2

下面将计算输入=符号时的输入,并将该值替换为计算结果。

所以:

  • 5*5=将被替换为25
  • 5x5=将被替换为25
  • 5+5=将被替换为10

$("input").keyup(function(){
       var $this = $(this);
        if ($this.val().indexOf("=")>=0){
           $this.val(eval($this.val().replace("=", "").replace("x","*")));
        }            
    });

http://jsfiddle.net/QP8ay/1/

此方法用于eval()将字符串转换为计算。然而,这不是很安全:

为什么使用 JavaScript eval 函数是个坏主意?

于 2012-08-23T15:08:20.193 回答
2

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())

它当然会执行此代码并显示一个警告框。是否允许这样做取决于您。如果您要将原始数据发布到服务器,您当然希望严格清理输入。

于 2012-08-23T15:10:58.630 回答
1

您应该能够绑定到change event并获取源输入的值,然后使用它来填充您的其他控件,例如

 $('#inputSource').on('change', function(e) {        
       var value = $(this).val();
       if (value.match('=')) {
           value = value.replace('=','');
           numbers = value.split('x');
         if (numbers.length > 1) {
           $('#controlToBeUpdated').val(parseInt(numbers[0]) * parseInt(numbers[1]));
         }
       }
    };

当然,您需要添加一些验证以确保值是数字等。

于 2012-08-23T15:08:07.770 回答
0

我会使用以下内容:

$(function() {
    "use strict";
    var valid = /^[\d]+[x\/\*+\-][\d]+=$/i;

    $("#calc").on("keyup", function( e ) {
        var $this = $(this);
        if ( e.keyCode === 48 ) {
            if ( valid.test(this.value) ) {
                $this.val(eval($this.val().replace("=", "").replace("x","*")));
            }
        }
    });
});

由于eval 是邪恶的和不安全的,最好先检查这个计算是否真的有效。还要检查是否按下了实际=的键。

请参阅以下小提琴:http: //jsfiddle.net/sQVe/DSDQ2/

于 2012-08-23T15:36:39.080 回答