我试图用文本框的 onKeypress 事件验证小数点后 2 个小数点。它在 IE 上运行良好。但不是 chrome 和 firefox。但我的页面设计和 javascipt 函数如下所示。有人可以帮我解决这个问题。
<asp:UpdatePanel ID="UpdatePanel3" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<div class="grid-container-style">
<ig:WebDataGrid ID="grdname" runat="server" Width="100%" AutoGenerateColumns="False"
TabIndex="5" ViewStateMode="Enabled"
ClientIDMode="Static" DataKeyFields="Id" EnableDataViewState="True"
DefaultColumnWidth="100%">
<AjaxIndicator Enabled="False" />
<Columns>
<ig:TemplateDataField Key="field" Width="8%">
<ItemTemplate>
<asp:TextBox ID="txtJanuary" Width="100%" runat="server" TabIndex="5" ondblclick="this.focus();this.select()"
MaxLength="12" onchange="ValueChange(event,this,'field')" onkeypress="javascript:return InputDecimalCheck(event,this);"
SkinID="numeric-textbox" Text='<%# DataBinder.Eval(((Infragistics.Web.UI.TemplateContainer)Container).DataItem, "field") %>'></asp:TextBox>
</ItemTemplate>
<Header Text="field" />
<Footer />
</ig:TemplateDataField>
</Columns>
<Behaviors>
<ig:Selection RowSelectType="None" CellClickAction="Cell" CellSelectType="None">
</ig:Selection>
<ig:Activation Enabled="true">
</ig:Activation>
<ig:RowSelectors Enabled="false" RowNumbering="true" />
<ig:ColumnMoving Enabled="false" />
</Behaviors>
</ig:WebDataGrid>
</div>
</ContentTemplate>
</asp:UpdatePanel>
下面给出的Javascript代码
function InputDecimalCheck(e, txtControl) {
if ((e.shiftKey && e.keyCode == 45) || e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57) && e.which != 46) {
return false;
}
// . = 46
var text = txtControl.value;
// Only one decimal point
if (e.which == 46 && text.indexOf('.') != -1) {
return false;
}
var decimalIndex = text.length - text.indexOf('.');
// Only 2 numbers after decimal
if (text.indexOf('.') != -1 && (text.length - text.indexOf('.')) > 2 && !(txtControl.selectionStart <= text.indexOf('.'))) {
return false;
}
return true;
}
chrome 和 firefox 没有检测到它的函数调用。