ASP.NET требует, чтобы валидатор полей запускал фокус в firefox - PullRequest
0 голосов
/ 20 мая 2010

У меня есть 2 текстовых поля asp.net на панели обновлений. Оба элемента управления textbox имеют некоторый javascript, присоединенный к autotab к следующему полю и разрешающий только числовой ввод. Когда я ввожу некоторые данные в первое поле и нажимаю клавишу ввода, фокус смещается на следующее поле, а в поле обязательного поля второго поля отображается сообщение об ошибке «* обязательный», хотя я только что вошел в это поле. Как я могу предотвратить запуск валидатора при первом вводе текстового поля?

Я должен также упомянуть, что оба текстовых поля находятся в нижнем колонтитуле 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 допускает только допустимое подмножество символов, и, если пользователь нажимает ввод, устанавливает фокус на следующее поле.

Ответы [ 2 ]

2 голосов
/ 20 мая 2010

Я не уверен, почему происходит ошибка, но вы, вероятно, можете создать обходной путь, используя мини-api проверки на стороне клиента .

Найдите элемент валидатора на странице, сделав document.getElementById(), а затем установите флажок isvalid на true для валидатора, когда вы вкладываете в поле.

Кроме того, вы можете вызвать ValidatorEnable(validatorElement, false), чтобы отключить его, когда вы находитесь в поле, а затем снова включить его с помощью ValidatorEnable(validatorElement, true), когда вы выходите.

0 голосов
/ 26 мая 2010

Мне удалось это исправить, подключив JavaScript к событию onKeyPress вместо onKeydown.

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