使用附加的javascript强制日期格式文本框在FireFox中不起作用

Forcing Format for Date textbox using appended javascript not working in FireFox

本文关键字:文本 格式 FireFox 不起作用 日期 javascript      更新时间:2023-09-26

我试图强制格式化的文本框在IE 8-11和Chrome中有效,但在Firefox中无效。问题是,在Firefox中,你根本无法更改文本框中的值。它只是卡住了,改变值的唯一方法是框旁边的日历。以下是我对相关字段使用的方法:

     public static void RegisterMask(System.Web.UI.Page Caller)
     {
        System.Text.StringBuilder strMask = new System.Text.StringBuilder();
        strMask.Append("<script language='"javascript'">");
        strMask.Append("function maskKeyPress(objEvent) {");
        strMask.Append(" var iKeyCode = objEvent.keyCode;  ");
        strMask.Append("if(iKeyCode>=48 && iKeyCode<=57){return true;}");
        strMask.Append("else{");
        strMask.Append("return false;}}");
        strMask.Append("</script>");
        strMask.Append("<script language='"javascript'">");
        strMask.Append(" function mask(str,textbox,loc,delim,event){");
        strMask.Append("if (maskKeyPress(event)== false){return false;}");
        strMask.Append("var locs = loc.split(',');");
        strMask.Append("for (var i = 0; i <= locs.length; i++){");
        strMask.Append("for (var k = 0; k <= str.length; k++){");
        strMask.Append(" if (k == locs[i]){");
        strMask.Append(" if (str.substring(k, k+1) != delim){");
        strMask.Append("   str = str.substring(0,k) + delim + str.substring(k,str.length)}}}}textbox.value=str}");
        strMask.Append("</script>");
        System.Web.UI.ScriptManager.RegisterClientScriptBlock(Caller, Caller.GetType(), "Mask", strMask.ToString(), false);
     }
 protected override void Page_Load(object sender, EventArgs e)
 {
    RegisterMask(this.Page);
    if (!Page.IsPostBack) 
    { 
        pMask(this.Page, ref txtStart, "/", "2,5");
        pMask(this.Page, ref txtEnd, "/", "2,5");
    }
 }
            <cs:Row runat="server" ID="rwStartDate">
                <LabelTemplate><asp:Label runat="server" ID="lbltxtStart"      AssociatedControlID="txtStart">Start</asp:Label></LabelTemplate>
                <ControlTemplate>
                    <asp:TextBox runat="server" ID="txtStart" Width="100" EnableViewState="true" AutoPostBack="true"/>
                    <asp:RequiredFieldValidator runat="server" ID="rfvStartDate" ControlToValidate="txtStart" ErrorMessage="Invalid Date" SetFocusOnError="true" CssClass="validator">*</asp:RequiredFieldValidator>
                    <asp:CustomValidator runat="server" ID="csvStart" ControlToValidate="txtStart" ErrorMessage="Invalid Date" SetFocusOnError="true" CssClass="validator" ClientValidationFunction="Validator.validateDate" />
                    <asp:HyperLink NavigateUrl="#" runat="server" ID="lnkCalStart" ToolTip="Toggle Calendar" CssClass="calendar" />
                    <ajax:CalendarExtender runat="server" ID="ajxStart" OnClientDateSelectionChanged="calendarExtenderHelper" Animated="false" PopupPosition="Right" Format="M/d/yyyy" TargetControlID="txtStart" PopupButtonID="lnkCalStart" BehaviorID="ajxCalStart" />
                </ControlTemplate>
            </cs:Row>

原来是firefox不支持onkeypress,需要更改为onkeyup。在numpad上也有一个问题,它需要另一组键码。