Подтвердить что ты не робот

Как я могу отключить обязательное поле проверки валидатора ASP.NET "потерянный фокус"

У меня есть код, где мне нужно два отдельных обязательных поля для одного элемента управления, как в отдельных группах проверки, которые затем проверяются двумя отдельными кнопками.

Этот подход хорошо работает, когда кнопки нажимаются, но оба проверяющих проверяют, вводя значение в текстовое поле, а затем удаляю его.

Есть ли способ отключить проверку "потерянного фокуса"? Мне нужно только это, чтобы проверить, когда нажимаются кнопки.

ИЗМЕНИТЬ

К сожалению, если я устанавливаю EnableClientScript = false, то у меня нет клиентских уведомлений. Я хочу, чтобы динамическое сообщение об ошибке отображалось (эффектно в событии OnClientClick кнопки), но не "потерянный фокус" текстового поля.

Есть ли способ отключить или "отцепить" событие клиента lostfocus?

ИЗМЕНИТЬ

Комбинация dDejan answer и womp answeer здесь отлично отсортировала проблему.

Мой последний код выглядит так (для кого-то другого с аналогичной ситуацией)...

Javascript...

<script type="text/javascript">

    $(document).ready(function() {
        $('body').fadeIn(500);

        //Turn off all validation = its switched on dynamically
        $.each(Page_Validators, function(index, validator) {
                ValidatorEnable(validator, false);
        });
    });

    function ToggleValidators(GroupName) {

        $.each(Page_Validators, function(index, validator) {
            if (validator.validationGroup == GroupName) {

                ValidatorEnable(validator, true);

            } else {
                ValidatorEnable(validator, false);
            }
        });
    }

</script>

Пример управления ASPX...

<telerik:RadTextBox Width="196px" ID="txtFirstName" runat="server" MaxLength="50" Skin="Black"></telerik:RadTextBox>
<asp:RequiredFieldValidator ID="valFirstName" CssClass="Validator" runat="server" EnableClientScript="true" Display="Dynamic" ErrorMessage="You  must enter your first name." ControlToValidate="txtFirstName" ValidationGroup="NeededForEmail"></asp:RequiredFieldValidator>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" CssClass="Validator" runat="server" EnableClientScript="true" Display="Dynamic" ErrorMessage="You  must enter your first name." ControlToValidate="txtFirstName" ValidationGroup="NeededForSubmit"></asp:RequiredFieldValidator>

Код кнопки ASPX...

<asp:Button ID="btnGetConfCode" runat="server" Text="Get Confirmation Code" OnClientClick="ToggleValidators('NeededForEmail')" OnClick="btnGetConfCode_Click" Width="100%" ValidationGroup="NeededForEmail"/>

<asp:Button ID="btnRegisterUser" runat="server" Text="Register" OnClientClick="ToggleValidators('NeededForSubmit')" OnClick="btnRegisterUser_Click" Width="100px" ValidationGroup="NeededForSubmit" />

Итак, теперь нет подтверждения, пока пользователь не нажмет кнопку "Получить код подтверждения электронной почты" или кнопку "Регистрация".

Если они нажимают кнопку "Получить код подтверждения электронной почты", все элементы управления проверяют отдельно от текстового поля, в котором пользователь должен ввести код проверки электронной почты, и мы видим только одно сообщение проверки.

Если они нажимают кнопку "Регистрация", тогда все элементы управления проверяют, и мы видим только одно сообщение проверки.

Если нажата любая из кнопок, пользователь возвращается, добавляет и затем удаляет какой-то текст, тогда мы видим только один валидатор. Перед этим изменением вы использовали, чтобы оба сообщения говорили одно и то же.

Благодарим вас за помощь ребятам

4b9b3361

Ответ 1

Вы можете установить, являются ли валидаторы "активными" или нет с клиентским кодом, используя функцию ValidatorEnable. В основном это похоже на это

var validator = document.getElementById('<%=Validator1.ClientID%>');
ValidatorEnable(validator , state); //where state is boolean

Вы также можете активировать валидатор для проверки на некотором событии (например, щелчком кнопок) с помощью функции ValidatorValidate(validator).

Я не уверен, что будет работать лучше для вас (включение/отключение валидаторов или пользовательский запуск проверки), но я предлагаю эту статью, которая поможет вам в правильном направлении

Проверка ASP.NET в глубину

Ответ 2

Нельзя отцепить их, если EnableClientScript = true.

Что вы можете сделать, это установить значение false. Затем создайте метод проверки javascript, который вызывается при отправке события onClientClick.

В вашем методе вам нужно будет вызвать ValidatorValidate (control) для каждого элемента управления, который вы хотите проверить на стороне клиента

Вот пример:

http://msdn.microsoft.com/en-us/library/Aa479045#aspplusvalid_clientside

Ответ 3

Вы можете отключить проверку javascript, установив EnableClientScript = "false", чтобы избавиться от утраченной проверки фокуса.

Ответ 4

Вместо этого вы можете использовать элементы управления Custom Validator и либо проверять входные данные с помощью Javascript на клиенте, либо внутри обработчика событий на сервере. Убедитесь, что вы установите ValidateEmptyText = "true" на элементы проверки, иначе события не будут запускаться в пустом поле.

Ответ 5

Попробуйте включить обе кнопки, используя javascript, и отключите его при событии размывания текстового поля.

Ответ 6

var validator = document.getElementById('<%=Validator1.ClientID%>');
ValidatorEnable(validator , state); 

Он работает в javascript, но когда мы используем функцию page.Isvalid на стороне сервера, он создает проблему для проверки страницы, которая действительна или нет.

Ответ 7

Попробуйте сбросить событие onchange для ввода-контроля.

$(document).ready(function () {
        $("#controlid").each(function () { this.onchange = null; })
    });

Ответ 8

просто введите этот код в page_load event

textboxname.Attributes.Add("onblur","ValidatorOnChange(event);");