Отключить валидатор asp.net с помощью jquery

Я пытаюсь отключить валидаторы с помощью jquery.

Я уже посмотрел Отключить валидаторы ASP.NET с помощью JavaScript и несколько других делают то же самое.

Кажется, он работает, но его разрыв.

Мой код:

$('.c_MyValdiators').each(function() {

    var x = $(this).attr('id');
    var y = document.getElementById(x);
    ValidatorEnable(y[0], false);
});

Я получаю сообщение об ошибке: val undefined [Разрыв этой ошибки] val.enabled = (enable!= False);\r\n

В качестве альтернативы, если я использую

$('.c_MyValdiators').each(function() {
    ValidatorEnable($(this), false); OR ValidatorEnable($(this[0]), false);
  });

Я получаю сообщение об ошибке:

val.style undefined [Прерывать эту ошибку] ​​val.style.visibility = val.isvalid? "скрытый": "видимый"; \r\n

Любая идея или предложения?

Ответы

Ответ 1

Я верю, что ValidatorEnable принимает идентификатор ASP.net, а не идентификатор ClientID, созданный ASP.net. Вам также необходимо сделать проверку правильности в CodeBehind.

вот пример:

Особое использование - возможность включать или отключать валидаторы. Если у вас есть проверка, что вы хотите активировать только в определенных сценариях, вам может потребоваться изменить активацию как на сервере, так и на клиенте, или вы обнаружите, что пользователь не может отправить страницу.

Вот предыдущий пример с полем, которое должно быть проверено только при снятой флажке:

public class Conditional : Page {
    public HtmlInputCheckBox chkSameAs;
    public RequiredFieldValidator rfvalShipAddress;
    public override void Validate() {
        bool enableShip = !chkSameAs.Checked;
        rfvalShipAddress.Enabled = enableShip;
        base.Validate();
    }
}

Вот эквивалент клиентской стороны:

<input type=checkbox runat=server id=chkSameAs 
   onclick="OnChangeSameAs();" >Same as Billing<br>
<script language=javascript>
function OnChangeSameAs() {
    var enableShip = !event.srcElement.status;
    ValidatorEnable(rfvalShipAddress, enableShip);
}
</script>

Ссылка: http://msdn.microsoft.com/en-us/library/aa479045.aspx

Ответ 2

Я только что наткнулся на ваш вопрос [через год]. Я тоже хотел отключить все валидаторы на странице с помощью JQuery, вот как я справился с ней.

$('span[evaluationfunction]').each(function(){ValidatorEnable(this,false);});

Я ищу каждый пролет на странице с атрибутом функции оценки, затем вызываю ValidatorEnabled для каждого из них.

Я думаю, что часть кода ('this') вашего кода является причиной hickup.

Ответ 3

ValidatorEnable(document.getElementById($(this).attr('id')), true); 

Ответ 4

У меня есть другое решение, которое должно использовать свойство "enabled" тега span для валидатора. У меня были разные divs в форме, которая отображалась бы или скрывалась, поэтому мне нужно было отключить проверку для полей внутри скрытого div. Это решение отключает проверку, не запуская их.

Если у вас есть набор элементов RequiredFieldvalidator, которые содержат общую строку, которую вы можете использовать для захвата, это jquery:

$("[id*='CommonString']").each(function() {
    this.enabled = false;   // Disable Validation
});

or

$("[id*='CommonString']").each(function() {
    this.enabled = true;    // Enable Validation
});

Надеюсь, что это поможет.

Джон

Ответ 5

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

Я считаю, что это связано с тем, что ValidatorEnable() ожидает объект DOM (т.е. объект управления проверкой), противоположный идентификатору.

$(selector).each() устанавливает "this" в элемент DOM, который в настоящее время выполняется итерацией по i.e, указанному в документации jquery:

"Что еще более важно, обратный вызов запускается в контексте текущего DOM, поэтому ключевое слово this относится к элементу." - http://api.jquery.com/each/

Поэтому вам нужно не: document.getElementById($(this).attr('id')

И вместо этого ValidatorEnable(this, true); отлично.

Интересно, что в ответе Russ упоминалось о необходимости также отключить проверку на стороне сервера, что имеет смысл - но мне не нужно было делать это (что касается!).

Отмените мой предыдущий комментарий, потому что раньше я отключил серверную сторону.

Ответ 6

Функция ValidatorEnable принимает объект как 1-й параметр, а не строку идентификатора объекта.

Ответ 7

Вот простой способ справиться с этим.

Добавить новый класс в элемент управления Validation.

Затем найдите этот класс с jquery и отключите элемент управления.

Пример:

if (storageOnly == 1)
   {
        $('#tblAssignment tr.assdetails').addClass('hidden');

        $('span[evaluationfunction]').each(function ()
        {
            if ($(this).hasClass('assdetail'))
            { ValidatorEnable(this, false); }
        });
    }
    else
    {
        $('#tblAssignment tr.assdetails').removeClass('hidden');
    }

* Работает как шарм. ** Для вас образные типы, assdetail == назначение детали.

Здесь, в зависимости от условия if, я либо скрываю строки, либо отключая валидатор, либо удаляя скрытый класс из строк.