Проверить скрытое поле - PullRequest
16 голосов
/ 14 марта 2012

Я использую MVC3 с ненавязчивой проверкой.У меня есть поле, которое пользователь должен заполнить некоторыми данными, а затем нажать кнопку «Поиск».Если поиск никогда не был нажат или пользователь изменил поле ввода после нажатия на поиск, форма не может быть отправлена.

Я добавил скрытое поле, которое установлено true с помощью click() событие кнопки и очищается событием keyup() поля ввода.Теперь я хотел бы добавить правило проверки, которое требует, чтобы скрытое поле было true, чтобы разрешить отправку.

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

Следующий фрагмент кода делает именно то, что я хочу, пока я не добавлю type="hidden".

<input class="required" id="client-searched" data-val="true" 
  name="ClientSearched" data-val-required="Press search!"/>
<span class="field-validation-valid" data-valmsg-replace="true" 
  data-valmsg-for="ClientSearched"/>

Ответы [ 3 ]

26 голосов
/ 14 марта 2012

try

   var validator = $("#myFormId").data('validator');    
   validator.settings.ignore = "";

Вот информативное сообщение в блоге

EDIT

@ RAM предложило лучшее решениепожалуйста СЛЕДУЙТЕ

20 голосов
/ 08 ноября 2012

У меня была похожая проблема, и я использовал этот код для изменения значений по умолчанию в MVC 4:

@Scripts.Render("~/bundles/jqueryval")

<script type="text/javascript">
    $.validator.setDefaults({
        ignore: ""
    })
</script>

Источник: JQuery validate

2 голосов
/ 12 августа 2016

В некоторых случаях вы хотите просто игнорировать проверку одного или нескольких скрытых полей (не всех скрытых полей) в client side, а также вы хотите проверить их и другие скрытые поля вserver side.В этих случаях у вас есть атрибуты проверки для всех скрытых полей в вашем ViewModel, и они будут использоваться для проверки формы при ее публикации (server side).

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

Установить data-force-val как true в целевых скрытых тегах ввода.Это наш пользовательский атрибут, который мы используем для обнаружения целевых скрытых входов, когда мы хотим проверить их на стороне клиента.

// This hidden input will validate both server side & client side
<input type="hidden" value="" name="Id" id="Id" 
       data-val-required="The Id field is required." 
       data-val="true"
       data-force-val="true">

// This hidden input will validate both server side & client side
<input type="hidden" value="" name="Email" id="Email" 
       data-val-required="The Email field is required." 
       data-val="true"
       data-force-val="true">

// This hidden input just will validate server side
<input type="hidden" value="" name="Name" id="Name" 
       data-val-required="The Neme field is required." 
       data-val="true">

Также вы можете установить data_force-val для скрытых входов с помощью jQuery:

$("#Id").attr("data-force-val", true);    // We want validate Id in client side
$("#Email").attr("data-force-val", true); // We want validate Email in client side
$("#Name").attr("data-force-val", false); // We wont validate Name in client side (This line is not necessary, event we can remove it)

Теперь, активируйте data-force-val="true" функциональность с помощью некоторых простых кодов, подобных этим:

var validator = $("#TheFormId").data('validator');    
validator.settings.ignore = ":hidden:not([data-force-val='true'])";

Примечание: validator.settings.ignore значение по умолчанию :hidden

...