JQuery中的动态数
我不知道为什么我在搜索这个时遇到了这么多困难,看起来很容易,但我找不到任何信息 基本上,我希望ASP.net表单上的控件根据字段中的数字进行更新 因此,如果我有0x0=它将显示0,如果我将数字更改为5x5=它将在我完成键入后自动显示25 编辑:我没有一个好的代码示例,下面是一个我想要的示例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: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> 你想把它展示在哪里?您将在何处显示此内容?已按暂停键入或已聚焦字段外的方式完成键入。您希望在何处显示此内容?你会在哪里找到这个?像在暂停键入或在字段外聚焦一样完成键入。