1

テキストボックスの onKeypress イベントで小数点以下 2 桁の 10 進数を検証しようとしていました。IEで問題なく動作しています。しかし、クロムとファイアフォックスではそうではありません。しかし、以下に示す私のページデザインと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 が関数呼び出しを検出していません。

4

1 に答える 1

1

お客様の要件に合わせてコードを修正しました。ロジックを理解していただければ幸いです。

次のコードをコピーして貼り付けて、自分の側から試してください。

コード ビハインドに次のコードを記述します。

protected void Page_Load(object sender, EventArgs e)
{
    TextBox1.Attributes.Add("OnKeyPress", "return InputDecimalCheck(event,'"+ TextBox1.ClientID +"');");
}

Javascript コード:

function InputDecimalCheck(key, txtControl) {
    var unicode = (key.which) ? key.which : key.keyCode;

    if ((unicode == 45) || unicode != 8 && unicode != 0 && (unicode < 48 || unicode > 57) && unicode != 46) {
        return false;
    }
    // . = 46
    var text = document.getElementById(txtControl).value;

    // Only one decimal point
    if (unicode == 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;
}
于 2013-02-22T11:09:41.100 に答える