2009-10-29 2 views
14

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

Я уже посмотрел Disable ASP.NET validators with JavaScript и пару других, делающих то же самое.

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

Мой код:

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

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

Я получаю Ошибка: вал не определен [Перерыв на этой ошибке] val.enabled = (разрешить = ложь!); \ Г \ п

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

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

Я получаю Ошибка:

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

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

+1

В качестве основного наконечника troublehooting, вы можете сначала хотят увидеть, что передается в вашей функции. Что возвращает x или y? –

ответ

6

Я верю, что 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

Спасибо за ваш ответ. Ссылка MSDN хороша для использования в будущем. У меня нет подтверждения validate(), поскольку я m в файле ascx. Я только что получил работу после того, как много попыток, используя: ValidatorEnable (document.getElementById ($ (this).attr ('id')), true); Есть еще одна проблема: поскольку это просто включение/отключение на стороне клиента, как я могу отключить мои валидаторы как таковые, они отключены, когда обратная передача страницы? любые идеи? – LibraRocks

+0

, вы можете просто создать CustomValidator с пользовательским скриптом clientide, который проверяет на основе условия. Ссылка, опубликованная выше, показывает, как это сделать –

6

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

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

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

Я думаю, что $ ('this') часть вашего кода - это то, что вызывало hickup.

0

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

0

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

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

Затем найдите этот класс с 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 == назначение детали.

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

1

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

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

$ (селектор) .each() устанавливает "это" в элемент DOM будучи в настоящее время итерации, т.е. цитата из документации Jquery:

"More importantly, the callback is fired in the context of the current DOM element, so the keyword this refers to the element." - http://api.jquery.com/each/

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

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

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

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

2

У меня есть другое решение, которое должно использовать свойство «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 
}); 

Надеется, что это помогает.

John