Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET Validator вынуждает нажимать tab дважды для перехода к другому полю / 10 сообщений из 10, страница 1 из 1
21.11.2012, 12:23
    #38046702
Сирин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Validator вынуждает нажимать tab дважды для перехода к другому полю
Если введённое значение корректно, то по tab переход на следующее поле осуществляется сразу. Если значение некорректно (не проходит валидацию), то приходится нажимать tab дважды, чтобы перейти на следующее поле. Я так понял, что при потере фокуса (blur) срабатывает валидация, и в случае неправильного ввода фокус остаётся на текущем поле, чтобы пользователь смог исправить значение. Однако при этом никаких сообщений об ошибках не выводится. Они появляются только при отправке формы, при этом фокус устанавливается на первом поле с некорректными данными. Я бы хотел, чтобы фокус менялся сразу, а остальное оставить без изменений, т. е. сообщения ошибках появляются только при отправке формы.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<asp:ValidationSummary runat="server" ValidationGroup="ChangePasswordValidation" />
<asp:TextBox ID="Verification" runat="server" TextMode="Password" CausesValidation="True" />
<asp:TextBox ID="Password" runat="server" TextMode="Password" CausesValidation="True"/>
<asp:TextBox ID="Confirmation" runat="server" TextMode="Password" CausesValidation="True" />
<asp:Button ID="ChangePasswordButton" runat="server" OnClick="ChangePassword_Click" Text="Применить" ValidationGroup="ChangePasswordValidation" />

<asp:RequiredFieldValidator ID="OldPasswordRequiredFieldValidator" runat="server" ControlToValidate="Verification" Display="None" ErrorMessage="Введите старый пароль" SetFocusOnError="true" ValidationGroup="ChangePasswordValidation">
</asp:RequiredFieldValidator>
<asp:RequiredFieldValidator ID="PasswordRequiredFieldValidator" runat="server" ControlToValidate="Password" Display="None" ErrorMessage="Введите пароль" SetFocusOnError="true" ValidationGroup="ChangePasswordValidation">
</asp:RequiredFieldValidator>
<asp:RequiredFieldValidator ID="ConfirmationRequiredFieldValidator" runat="server" ControlToValidate="Confirmation" Display="None" ErrorMessage="Введите повтор пароля" SetFocusOnError="true" ValidationGroup="ChangePasswordValidation">
</asp:RequiredFieldValidator>
<asp:CompareValidator ID="PasswordsCompareValidator" runat="server" ControlToValidate="Password" Display="None" ErrorMessage="Пароль и повтор пароля должны совпадать" SetFocusOnError="true" ValidationGroup="ChangePasswordValidation" ControlToCompare="Confirmation">
</asp:CompareValidator>


ASP.NET 4.0.
...
Рейтинг: 0 / 0
21.11.2012, 12:29
    #38046721
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Validator вынуждает нажимать tab дважды для перехода к другому полю
Сирин,

Атрибут SetFocusOnError="true" на всех твоих валидаторах на какие-нибудь мысли наводит?
...
Рейтинг: 0 / 0
21.11.2012, 12:59
    #38046801
Сирин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Validator вынуждает нажимать tab дважды для перехода к другому полю
Установка SetFocusOnError в False устраняет проблему с табом, но тогда и при сабмите при наличии ошибки не происходит фокусировка на первом невалидном поле. В целом, такое поведение уже приемлемо, но было бы лучше, если бы фокус переходил при сабмите при наличии ошибки.
...
Рейтинг: 0 / 0
21.11.2012, 13:48
    #38046934
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Validator вынуждает нажимать tab дважды для перехода к другому полю
СиринВ целом, такое поведение уже приемлемо, но было бы лучше, если бы фокус переходил при сабмите при наличии ошибки.
Напиши свой валидатор, раз не устраивает поведение стандартного.
...
Рейтинг: 0 / 0
21.11.2012, 15:31
    #38047171
Сирин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Validator вынуждает нажимать tab дважды для перехода к другому полю
А штатного способа отключения проверки на onblur нет?
...
Рейтинг: 0 / 0
23.11.2012, 10:52
    #38050069
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Validator вынуждает нажимать tab дважды для перехода к другому полю
javascript

Page_Validators - перечисление всех валидаторов на странице
Page_Validators[index].isvalid - валиден ли валидатор
Page_Validators[index].controltovalidate - id элемента проверяемого валидатором

в OnClientClick твоей сабмитящей кнопки можешь написать что-то вроде javascript:return myValidate();

в myValidate пройтись по всем валидоторам на странице, и при встрече первого невалидного - установить фокус (document.getElementById(Page_Validators[index].controltovalidate).focus()) и вернуть false, чтобы не было сабмита
...
Рейтинг: 0 / 0
23.11.2012, 17:54
    #38051108
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Validator вынуждает нажимать tab дважды для перехода к другому полю
Сирин, ну что, справился?
...
Рейтинг: 0 / 0
26.11.2012, 10:55
    #38052800
Сирин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Validator вынуждает нажимать tab дважды для перехода к другому полю
SanSYS,

Спасибо за вариант, но пока пошёл по пути наименьшего сопротивления — SetFocusOnError = False. Если потребуется фокусировка, то попробую ваш алгоритм.
...
Рейтинг: 0 / 0
26.11.2012, 13:04
    #38053080
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Validator вынуждает нажимать tab дважды для перехода к другому полю
СиринSanSYS,

Спасибо за вариант, но пока пошёл по пути наименьшего сопротивления — SetFocusOnError = False. Если потребуется фокусировка, то попробую ваш алгоритм.
Не правильное решение, ты прежде всего программист, потому должен попробовать, даже если не внедришь, иначе, когда подобная проблема возникнет вновь - придется вновь изобретать велосипед
...
Рейтинг: 0 / 0
26.11.2012, 17:00
    #38053653
Сирин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Validator вынуждает нажимать tab дважды для перехода к другому полю
SanSYS,

Инициализируя OnClientClick, мы затираем то, что ASP.NET туда пишет. А он пишет свою функцию, которая валидирует и выводит сообщения об ошибках . Получается, что фокус устанавливается на первом контроле, но сообщения не выводятся.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET Validator вынуждает нажимать tab дважды для перехода к другому полю / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]