Я пытаюсь выполнить проверку в моей условной форме. В принципе, если пользователь выбирает параметр электронной почты, тогда потребуется электронное письмо, или если телефон выбран, тогда потребуется поле телефона.Показать скрыть div и скрипт на основе переключателя
До сих пор я работал, чтобы этот код работал, форма отправки и проверки корректно работают. Но если я переключусь на телефон, а затем вернусь к электронной почте, проверка будет загружена, поэтому форма не будет отправлена, если я не заполнил оба поля.
У меня он установлен таким образом, но в основном пытается сделать так, если выбрано одно поле, а другое требуется. Есть ли лучшие способы сделать это?
HTML:
<label>Method of Contact</label>
<label class="radio">
<input type="radio" name="group" value="ck1" checked/>
Email
</label><br />
<label class="radio"><input type="radio" name="group" value="ck2" />
Phone
</label>
<div id="emaildisp">
<label>Email</label>
<input id="emailv" name="email" type="email" />
</div>
<div id="phonedisp">
<label>Phone</label>
<input id="phonev" name="phone" type="text" />
</div>
Javascript:
$(function()
{
if (jQuery('input[value=ck2]:checked').length > 0)
{
jQuery('#phonedisp').show();
jQuery('#emaildisp').hide();
jQuery("#phonev").validate(
{
expression: "if (VAL) return true; else return false;",
message: "Please enter your phone number"
});
}
else
{
jQuery('#phonedisp').hide();
jQuery('#emaildisp').show();
jQuery("#emailv").validate(
{
expression: "if (VAL) return true; else return false;",
message: "Please enter your email"
});
}
jQuery('input[name=group]').change(function()
{
var selected = jQuery(this).val();console.log(selected);
if(selected == 'ck2')
{
jQuery('#phonedisp').show();
jQuery('#emaildisp').hide();
jQuery("#phonev").validate(
{
expression: "if (VAL) return true; else return false;",
message: "Please enter your phone number"
});
}
else
{
jQuery('#phonedisp').hide();
jQuery('#emaildisp').show();
jQuery("#emailv").validate(
{
expression: "if (VAL) return true; else return false;",
message: "Please enter your email"
});
}
});
});
Решение: Благодаря ответам ниже, я пришел с решением. Ключевая разница, я не использовал плагин проверки jquery, а другой скрипт проверки. Поэтому я переключился на новичков, просто посмотрю, что вам просто нужно добавить ссылку на скрипт в заголовке.
Далее я дал форму id, #myform. Затем у меня есть переключатель ck1 и ck2 со своими соответствующими идентификаторами, # ck1id и # ck2id. И используя приведенный ниже код, если выбран переключатель, тогда, в зависимости от выбранного идентификатора, следующая часть станет необходимой для проверки.
<script type='text/javascript'>
$(function(){
jQuery('input[name=group]').change(function() {
var selected = jQuery(this).val();console.log(selected);
if(selected == 'ck2'){
jQuery('#phonedisp').show();
jQuery('#emaildisp').hide();
} else {
jQuery('#phonedisp').hide();
jQuery('#emaildisp').show();
}
});
jQuery('input[name=group]').triggerHandler('change');
});
</script>
<script>
$(function(){
// validate signup form on keyup and submit
$("#myform").validate({
rules: {
group: "required",
email:
{
required: '#ck1id:checked',
email: true
},
phone:
{
required: '#ck2id:checked',
digits: true
}
},
messages: {
group: "Please select one",
email: "Please enter your email.",
phone: "Please enter your phone."
}
});
});
</script>
Большое спасибо за очищенный код! Переключение между телефоном и электронной почтой работает красиво. Как раз одна проблема, однако, удаление проверки не работает, я получаю сообщение об ошибке: «У объекта нет правил метода». Как только я удаляю строку правил, она работает отлично, за исключением случаев, когда я переключаюсь между переключателями, мне придется заполнить оба поля. Еще раз спасибо! – Jake
@ Jake: кажется, что вы используете библиотеку, отличную от плагина проверки jquery. Идея состоит в том, чтобы удалить другую проверку поля. Проверьте документацию библиотеки, которую вы используете, чтобы найти соответствующий метод. Надеюсь, ты его найдешь. –
Это действительно была проблема, я использовал плагин от GeekTantra, оказался не слишком эффективным. Так перешел на плагин проверки jquery.Большое спасибо за помощь снова, я обновляю сообщение, так что если кто-то другой попадет в ту же ситуацию, которую они могут видеть. – Jake