我需要在文本框中显示数字,文本框的逗号分隔符格式为数千。每个文本框如下:
<asp:TextBox ID="txtNumber" MaxLength="16" runat="server" onfocus="unFormatTextBox(this);" onblur="formatTextBox(this);" />
绘制页面时,数字在服务器端进行格式化,因此1000.50将变为1000.50,并设置为文本框值。
当用户点击文本框时,为了便于编辑,逗号会被删除。
function unFormatTextBox(elementId) {
// removes commas on focus
var num = elementId.value;
elementId.value = num.replaceAll(',', '');
}
当用户单击其他位置而文本框失去焦点时,将重新格式化条目并重新插入逗号。。
function formatTextBox(elementId) {
// add commas on mouseout
var num = elementId.value;
var parts = num.toString().split(".");
parts[0] = parts[0].replace(/B(?=(d{3})+(?!d))/g, ",");
elementId.value = parts.join(".");
}
这非常有效。然而,它与RegularExpressionValidator冲突。。
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txtNumber" ErrorMessage="" ValidationExpression="^[0-9]{1,3}(,[0-9]{3})*(.[0-9]+)?$">*</asp:RegularExpressionValidator>
所以用户按键:
1500
当文本框失去焦点时,例如,他们单击下一个文本框,该文本框将被重新格式化为:
1500
问题是:Validator随后启动并显示条目不正确,即使它应该是正确的。Validator应该允许使用逗号的条目(然后在处理提交的值之前,我将删除服务器端(。
但是,如果用户随后单击"提交",您会认为这将不起作用,因为字段被突出显示为无效——实际上,它确实起作用,并且页面提交。
有人能解释为什么会发生这种情况以及如何阻止它吗?非常感谢。
在键入keyup
事件时检查并更新格式如何?
$('input.number').keyup(function(event) {
// skip arrow keys
if(event.which >= 37 && event.which <= 40) return;
// format number
$(this).val(function(index, value) {
return value
.replace(/D/g, "")
.replace(/B(?=(d{3})+(?!d))/g, ",")
;
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<input class="number" id="id_" name="id_" type="text">
参考编号:https://stackoverflow.com/a/2632502/8291949
解决方案是更改RegExp:
<asp:RegularExpressionValidator ID="RegularExpressionValidator8" runat="server" ControlToValidate="txtProductQuantity" ErrorMessage="*" CssClass="fvError" Display="Dynamic" ValidationExpression="^(?:[0-9]+(?:[.,][0-9]+)?|[1-9][0-9]{0,2}(?:(?:.[0-9]{3})*|(?:,[0-9]{3})*)(?:.[0-9]+)?)$">*</asp:RegularExpressionValidator>