ASP.NET需要在firefox中关注焦点的字段验证器

时间:2010-05-20 15:54:08

标签: asp.net firefox requiredfieldvalidator

我在更新面板中有2个asp.net文本框。两个文本框控件都有一些javascript附加到autotab到下一个字段,并且只允许数字输入。当我在第一个字段中输入一些数据并按回车键时,焦点转移到下一个字段,第二个字段的requiredfieldvalidator显示其“* required”错误消息,即使我刚刚进入该字段。当我第一次进入文本框时,如何阻止验证器触发?

我还应该提到两个文本框都在gridview页脚中。

以下是代码:

<asp:TextBox ID="add_ISBN" runat="server" Columns="14" MaxLength="17" CssClass="focus" />
<asp:TextBox ID="add_Qty" runat="server" Columns="4" MaxLength="4" />
<asp:RequiredFieldValidator ID="rfvQty" ControlToValidate="add_Qty" ErrorMessage="* required" ForeColor="Red" Display="Dynamic" EnableClientScript="true" ValidationGroup="Add" runat="server" />

在代码隐藏中:

 add_ISBN.Attributes.Add("onkeydown", "return isbnCheck(event, '" & add_Qty.ClientID & "')") 

和javascript:

function isbnCheck(e, id) {
    e = e || window.event;
    var key = e.which || e.keyCode

    if (validIsbnChars.indexOf(parseInt(key, 10)) >= 0) {
        return true;
    } else {
        if (key == 13) {
            var nextfield = document.getElementById(id);
            if (nextfield) nextfield.focus();
            return false;
        }
        if (e.preventDefault) e.preventDefault();
        e.returnValue = false;
        return false;
    }
}

javascript仅允许有效的字符子集,如果用户按Enter键,则将焦点设置为下一个字段。

2 个答案:

答案 0 :(得分:2)

我不确定为什么会发生错误,但您可以使用client-side validation mini-api创建解决方法。

在执行document.getElementById()的页面上找到validator元素,然后在选中该字段时在验证器上将isvalid标志设置为true。

或者,当您在该字段中时,可以调用ValidatorEnable(validatorElement, false)来禁用它,然后在标记时使用ValidatorEnable(validatorElement, true)重新启用它。

答案 1 :(得分:0)

我设法通过将javascript附加到onKeyPress事件而不是onKeydown来解决此问题。

add_ISBN.Attributes.Add("onkeydown", "return isbnCheck(event, '" & add_Qty.ClientID & "')")