2015-09-29 1 views
0

Вот моя проблема.
У меня есть сформированная бритва форма, которая имеет несколько полей, но я хочу, чтобы электронная почта была необходима только при щелчке по кнопке «Администратор системы». По умолчанию пользователь системы.JQuery Если нажата кнопка радио, введите поле для электронной почты

<div class="">@Html.LabelFor(m => m.Email)</div> 
    <div class=""> 
      @Html.TextBoxFor(m => m.Email, new { @class = "form-control required", placeholder = "Email" }) 
      @Html.ValidationMessageFor(m => m.Email) 
    </div> 

Я даже попытался удалить «необходимый» после контроля формы и вынести валидацию.

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

<div class="inline-editor create-user-roles"> 
    <input id="UserRole" name="UserRole" type="radio" value="System Administrator"> 
    <input id="UserRole" name="UserRole" type="radio" value="System User"> 
</div> 

Вот функция JQuery, которую я пытаюсь использовать.

$('input[name="UserRole"]').on('change', function() { 
    if ($('input[name="UserRole"]:checked').val() == "System Administrator") { 
     $('#Email').rules('add', { 
      required: true, messages: { required: "This field is required" } 
     }); 
    } 
    else { 
     $('#Email').rules('add', { 
      required: false 
     }); 
    } 
}); 
+0

вам необходимо обновить JS, как это 'если ($ (это) .а (': проверено') && $ (это) .val() == 'Системный администратор')' 'и заменить нажмите 'with' change' – Sushil

+0

Это не похоже на трюк. Он по-прежнему позволяет мне отправить форму без письма @Sushil – jgabb

+1

прежде всего, у вас есть несколько элементов с одним и тем же идентификатором. который должен идти. то вместо использования '$ ('# UserRole') нажмите' try, используя '$ ('input [name =" UserRole "]'). on ('change', function())' – Sushil

ответ

0

Хорошо, так я понял. Я нашел более простой способ сделать это, чтобы решить все мои проблемы. Вот оно!

$('input[name="UserRole"]').on('change', function() { 
    if ($('input[name="UserRole"]:checked').val() == "System Administrator")  { 
     $("#Email").removeClass('form-control').addClass('form-control required'); 
    } 
    else { 
     $("#Email").removeClass('form-control required').addClass('form-control'); 
     $("span[for^='Email']").remove(); 
    } 
}); 
+0

Это не решит ничего, поскольку вам нужно снова повторить логику на сервере. Подумайте об использовании [foolproof] (http://foolproof.codeplex.com/) '[RequiredIf (« UserRole »,« Системный администратор »)] или аналогичный атрибут, чтобы вы получили как проверку на стороне клиента, так и серверную версию. –

0

Я предполагаю, что вы используете jQueryValidation [из синтаксиса]. Изменение кода к следующему следует сделать трюк:

$('input[name="UserRole"]').on('change', function() { 
if ($(this).is(':checked') && $(this).val() == "System Administrator") { // `this` refers to the current element that has raised the event, i.e. shorter for `input[name="UserRole"]` in this case 
    $('#Email').rules('add', { 
     required: true, messages: { required: "This field is required" } 
     }); 
    } 
    else { 
     $('#Email').rules('remove'); // Take note of this part 
    } 
}); 

Обратите внимание, что вам нужноудалитьправило. Указание false на конкретное правило не повлияет на его удаление.

Update: Использование .rules() метода на элементах формы требует, чтобы вы уже вызывается метод .validate() [с пустым объектом] на форме.

То есть, добавьте следующую строку перед выше блока кода:

$('#yourFormId').validate({}); 

//rest of your code where you can add your validation rules with `.rule()`. 
+0

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

+0

@jgabb, проверьте обновление. –

+0

Спасибо.Я тоже пробовал это, но безрезультатно. Я отправил ответ, что я должен работать. Спасибо за вашу помощь! – jgabb

Смежные вопросы