Я пытаюсь добавить проверку на дату истечения срока действия кредитной карты, чтобы убедиться, что месяц и год заполнены, но у них есть только одна метка для выделения, поэтому она должна быть в одном правиле проверки.
Код в этом jsfiddle почти работает, но если вы выберете месяц, а затем год, при выборе раскрывающегося списка появится сообщение об ошибке, но оно не исчезнет при нажатии на год.
https://jsfiddle.net/47auhvtz/
В моей собственной версии этого кода он удаляет красный стиль, но не текст.
Это сообщение об ошибке ![1]](https://i.stack.imgur.com/pX8Nk.png)
Превращается в следующее: ![enter image description here](https://i.stack.imgur.com/a3Oxv.png)
Чего здесь не хватает?Есть ли лучший способ сделать это?
Код показан ниже:
HTML
<form id="frmCreateAgreement" class="form-horizontal" data-toggle="validate" role="form">
<div class="form-group col-sm-12">
<label for="selCardExpiryDate" class="control-label col-lg-5 col-md-3 col-sm-4">Expiry Date</label>
<div class="card-date">
<div class="col-lg-3 col-md-4 col-sm-4">
<select id="selCardExpiryMonth" name="CardExpiryMonth" class="form-control card-month">
<option value="" selected>Month</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
</select>
</div>
<div class="col-lg-4 col-md-5 col-sm-4">
<select id="selCardExpiryYear" class="form-control card-year">
<option value="" selected>Year</option>
<option value="2018">2018</option>
<option value="2018">2019</option>
<option value="2018">2020</option>
</select>
</div>
</div>
</div>
</form>
Javascript
$(document).ready(function () {
jQuery.validator.addMethod("cardDate", function (value, element) {
var cardDate = $(element).parents('.card-date');
var cardMonth = cardDate.find('.card-month').val();
var cardYear = cardDate.find('.card-year').val();
return this.optional(element) || (cardMonth.length > 0 && cardYear.length > 0);
}, function (params, element) {
return 'Month and year required'
});
$('#frmCreateAgreement').validate({
rules: {
CardExpiryMonth: {
required: true,
cardDate: true
}
}
});
});