JQuery中的动态数

JQuery中的动态数,jquery,asp.net,Jquery,Asp.net,我不知道为什么我在搜索这个时遇到了这么多困难,看起来很容易,但我找不到任何信息 基本上,我希望ASP.net表单上的控件根据字段中的数字进行更新 因此,如果我有0x0=它将显示0,如果我将数字更改为5x5=它将在我完成键入后自动显示25 编辑:我没有一个好的代码示例,下面是一个我想要的示例 <asp:textbox></asp:textbox>X<asp:textbox></asp:textbox> = <asp:label text="va

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

基本上,我希望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" />

您应该能够绑定到变更事件并获取源输入的值,然后使用该值填充其他控件,如

 $('#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]));
         }
       }
    };

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

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

 $('#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]));
         }
       }
    };

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

以下内容将在输入=符号时计算输入,并用计算结果替换该值

因此:

5*5=将替换为25 5x5=将替换为25 5+5=将替换为10 此方法使用eval将字符串转换为计算。然而,这并不十分安全:


以下内容将在输入=符号时计算输入,并用计算结果替换该值

因此:

5*5=将替换为25 5x5=将替换为25 5+5=将替换为10 此方法使用eval将字符串转换为计算。然而,这并不十分安全:

使用try..catch with eval 我在上面创建了一个不安全的示例,它可以满足您的要求,但是当插入符号仍在输入框上时,我没有等待结果,而是附加到blur event,以便在您将焦点切换到控件之外时计算值

它的作用是:

$("input").blur(function(evt) {
    try {
        var val = eval(this.value);
        this.value = val;
    }
    catch (e) {}
});
它尝试评估输入框的内容,如果可以,则用结果替换内容。这意味着你可以向它扔任何东西,只要eval能咀嚼它

我说不安全,因为代码并没有检查任何可能导致黑洞吞噬宇宙的内容

例子 1+2*3将改变7 宇宙将以宇宙的形式离开它 010+1将变为9,因此它也会产生八进制 0xf*2+3也将返回33个看起来像妈的十六进制 等 实施您的方法以使其更安全 这当然只是一个开始。若你们想让x成为乘法器,你们必须在输入字符串中做一些替换,我的例子并没有做到。但这样做很简单

如果您只想进行特定的计算,那么您不允许创建对象、日期或任何东西,情况也是如此

在您的案例中,一个可能不受欢迎的示例是如果您输入

alert(new Date())
这当然会执行此代码并显示一个警报框。你是否愿意接受这件事取决于你自己。如果您要将原始数据发布到服务器,您当然希望严格清理输入。

使用try..catch with eval 我在上面创建了一个不安全的示例,它可以满足您的要求,但是当插入符号仍在输入框上时,我没有等待结果,而是附加到blur event,以便在您将焦点切换到控件之外时计算值

它的作用是:

$("input").blur(function(evt) {
    try {
        var val = eval(this.value);
        this.value = val;
    }
    catch (e) {}
});
它尝试评估输入框的内容,如果可以,则用结果替换内容。这意味着你可以向它扔任何东西,只要eval能咀嚼它

我说不安全,因为代码并没有检查任何可能导致黑洞吞噬宇宙的内容

例子 1+2*3将改变7 宇宙将以宇宙的形式离开它 010+1将变为9,因此它也会产生八进制 0xf*2+3也将返回33个看起来像妈的十六进制 等 实施您的方法以使其更安全 这当然只是一个开始。若你们想让x成为乘法器,你们必须在输入字符串中做一些替换,我的例子并没有做到。但这样做很简单

如果您只想进行特定的计算,那么您不允许创建对象、日期或任何东西,情况也是如此

在您的案例中,一个可能不受欢迎的示例是如果您输入

alert(new Date())

这当然会执行此代码并显示一个警报框。你是否愿意接受这件事取决于你自己。如果您要将原始数据发布到服务器,您当然希望严格清理输入。

我将使用以下方法:

$(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是邪恶和不安全的,最好先检查此计算是否有效。同时检查是否按了实际=键


请参阅以下小提琴:

我将使用以下方法:

$(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是邪恶和不安全的,最好先检查此计算是否有效。同时检查是否按了实际=键

见以下小提琴:p> 你想把它展示在哪里?您将在何处显示此内容?已按暂停键入或已聚焦字段外的方式完成键入。您希望在何处显示此内容?你会在哪里找到这个?像在暂停键入或在字段外聚焦一样完成键入。