Я пытаюсь отключить валидаторы с помощью 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
Любая идея или предложения?
Я верю, что 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
Я только что наткнулся на ваш вопрос [через год]. Я тоже хотел отключить все валидаторы на странице с помощью JQuery, вот как я справился с ней.
$('span[evaluationfunction]').each(function(){ValidatorEnable(this,false);});
Я ищу каждый пролет на странице с атрибутом функции оценки, затем вызываю ValidatorEnabled для каждого из них.
Я думаю, что часть кода ('this') вашего кода является причиной hickup.
У меня есть другое решение, которое должно использовать свойство "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
});
Надеюсь, что это поможет.
Джон
ValidatorEnable(document.getElementById($(this).attr('id')), true);
Я просто сталкиваюсь с той же проблемой, благодаря другим ответам, поскольку это помогло выявить проблему, но они не стали подробно обсуждать почему.
Я считаю, что это связано с тем, что 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 упоминалось о необходимости также отключить проверку на стороне сервера, что имеет смысл - но мне не нужно было делать это (что касается!).
Отмените мой предыдущий комментарий, потому что раньше я отключил серверную сторону.
Различные способы этого зависят от ваших потребностей. Некоторые решения в следующих блогах:
http://imjo.hn/2013/03/28/javascript-disable-hidden-net-validators/
Вот простой способ справиться с этим.
Добавить новый класс в элемент управления 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, я либо скрываю строки, либо отключая валидатор, либо удаляя скрытый класс из строк.
Функция ValidatorEnable принимает объект как 1-й параметр, а не строку идентификатора объекта.