繁体   English   中英

通过Javascript设置值可将焦点设置为IE10中的文本框

[英]Setting value via Javascript sets focus to textbox in IE10

我有以下文本框

<asp:TextBox runat="server" ID="txtSeleID" Columns="12" MaxLength="14" 
             onfocus="javascript:SetSearchText();" 
             onchange="javascript:SetSearchText();"></asp:TextBox>
<asp:RegularExpressionValidator id="REV_SeleID" runat="server" 
             ErrorMessage="ID must contain up to 12 numbers." 
             Display="Dynamic" ControlToValidate="txtSeleID" 
             ValidationExpression="ID...|^\s*(\d{1,12}|\d{4}-\d{4}|\d{3}-\d{4}|\d{2}-\d{4}|\d{1}-\d{4}|\d{1}-\d{4}-\d{4}|\d{2}-\d{4}-\d{4}|\d{3}-\d{4}-\d{4}|\d{4}-\d{4}-\d{4})\s*$" CssClass="ValidationError" SetFocusOnError="True">(!)
</asp:RegularExpressionValidator>

和下面的javascript:

function SetSearchText() {
var Tbox = document.getElementById("<%=txtSeleID.ClientID%>");
if (Tbox.value == "ID...") {
    Tbox.value = "";
    Tbox.className = "";
}
}
$(document).ready(function () {
var Tbox = document.getElementById("<%=txtSeleID.ClientID%>");
if (Tbox.value.length == 0) {
    Tbox.className = "quickEnter";
    Tbox.value = "ID...";
}
if (Tbox.value == "ID...") 
    Tbox.className = "quickEnter";
});

这是按钮:

<asp:ImageButton EnableViewState="false" id="SubmitBtn" runat="server" 
    ImageUrl='<%#Page.ResolveUrl("~/images/btn_submit.gif")%>' 
    onclick="Submit_Click" ToolTip="Submit" />

问题是,当我单击提交按钮时,它将调用SetSearchText()函数并将其值设置为"" 在IE 10中,它将焦点设置到此文本框,我必须再次单击“提交”按钮才能将其提交。

如果我注释掉该值的设置,则不会发生焦点问题。

尝试提交时,如何防止浏览器将焦点强加到我的文本框中?

编辑:将正则表达式验证器添加到代码部分。

编辑:我发现这个问题有一个类似的问题,但我看不到解决方案。 在这一本书中,他正在使用html标签。 我正在使用ASP标记,因此无法轻松更改输入类型。

我最终通过检查浏览器版本来进行解决。 如果是IE 10/11,则不会将文本添加到输入字段中。

$(document).ready(function () {
    var lexidTbox = document.getElementById("<%=txtSeleID.ClientID%>");
    //workaround for IE10/11 issue
    var showLegalText = true;

// IF THE BROWSER IS IE10
if (navigator.appVersion.indexOf("MSIE 10") !== -1) {
    showLegalText = false;
}

// IF THE BROWSER IS IE11
if (navigator.userAgent.indexOf("Trident") !== -1 && navigator.userAgent.indexOf("rv:11") !== -1)
{
    showLegalText = false;
}

if (showLegalText) {
    if (lexidTbox.value.length == 0) {
        lexidTbox.className = "quickEnter";
        lexidTbox.value = "ID...";
    }
    if (lexidTbox.value == "ID...")
        lexidTbox.className = "quickEnter";
}

});

可以肯定的是,我不关心这种解决方法,因为它依赖于检查IE版本,但这是我可以找到解决此问题的唯一方法。 这样可以防止行Tbox.value = ""; 从运行,避免了我遇到的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM