отключить валидатор asp.net с помощью jquery - PullRequest
15 голосов
/ 29 октября 2009

Я пытаюсь отключить валидаторы, используя jquery.

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

Кажется, это не работает, но оно ломается.

Мой код:

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

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

Я получаю ошибку: val не определен [Прервать эту ошибку] ​​val.enabled = (включить! = False); \ r \ n

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

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

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

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

Есть идеи или предложения?

Ответы [ 8 ]

6 голосов
/ 26 октября 2010

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

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

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

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

6 голосов
/ 29 октября 2009

Я считаю, что ValidatorEnable принимает идентификатор ASP.net, а не идентификатор клиента, созданный 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 голосов
/ 25 марта 2014

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

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

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

or

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

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

John

2 голосов
/ 30 октября 2009
ValidatorEnable(document.getElementById($(this).attr('id')), true); 
1 голос
/ 15 марта 2013

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

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

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

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

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

И вместо этого ValidatorEnable(this, true); в порядке.

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

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

0 голосов
/ 15 апреля 2014

Различные способы сделать это в зависимости от ваших потребностей. Некоторые решения в следующих сообщениях в блоге:

http://imjo.hn/2013/03/28/javascript-disable-hidden-net-validators/

http://codeclimber.net.nz/archive/2008/05/14/How-to-manage-ASP.NET-validation-from-Javascript-with-jQuery.aspx

0 голосов
/ 09 июня 2011

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

Добавить новый класс в элемент управления 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, я либо скрываю строки, затем отключаю валидатор, либо удаляю скрытый класс из строк.

0 голосов
/ 28 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...