クレジットカードの有効期限の検証を実装しています。これにより、月と年が別々のドロップダウンに表示されます。レイアウトの小さな問題を除いて、ほぼそこにあります。
HTMLは次のようになります。
<form id="myform">
<table>
<tr>
<th colspan="2"><label class="secure-section-title" for="ccexp">Expiration date</label></th>
</tr>
<tr>
<td><select id="ccexp" name="cc_exp_month" class="required creditcardexpiry">
<option value="01">01</option> ... <option value="12">12</option>
</select> / <select name="cc_exp_year" class="required creditcardexpiry">
<option value="2012">12</option> ... <option value="2021">21</option>
</select></td>
<td></td>
</tr>
</table>
</form>
検証を実行するJavaScriptは次のとおりです。
$('#myform').validate({
errorPlacement: function(error, element) {
element
.closest('tr') // take closest parent
.prev('tr')
.find('> th')
.append(error)
},
groups: {
creditcardexpiry: 'cc_exp_month cc_exp_year'
}
});
$.validator
.addMethod('creditcardexpiry', function(value, element) {
var form = element.form,
expiry = form['cc_exp_year'].value + form['cc_exp_month'].value,
date = new Date(),
month = date.getMonth() + 1,
now = '' + date.getFullYear() + (month < 10 ? '0' + month : month);
return expiry > now;
});
基本的に、有効期限が1か月先の場合にのみ検証されます(将来の最大10年は、ドロップダウンによって制限されます)。
問題のシナリオは次のとおりです。
過去の日付を入力します。エラーメッセージが表示され、ドロップダウンが赤になります
年を2014年に増やして、エラーを修正します。エラーメッセージが消える
問題は、もう一度クリックするまで、月のドロップダウンがまだ赤であるということです。フィールドはグループ化されているため、無効なエントリが解決されると、両方のドロップダウンがクリアされることを期待していました。
私はここで明らかな何かを見落としていますか、それともこれはバグですか?
アップデート
groups
両方のフィールドのエラーによって2つのメッセージが発生しないようにするだけなので、プロパティに関するバグではありません。