マークアップが有効な HTML5 として検証されるように、直接属性ではなくデータ属性 (例: minlength の代わりに data-minlength、equalTo の代わりに data-equalTo) を使用するように jQuery Validator プラグインを接続しようとしていました。data-equalTo に到達するまで、すべてがうまく機能していました。代わりに data-equals を使用し、コードに特別な条件を追加する必要がありました。
$("#form").validate();
['minlength', 'maxlength', 'range', 'min', 'max', 'equals' /* 'equalTo' no worky! */].forEach(function (item) {
$('input[data-' + item + ']').each(function () {
if ($(this).data(item)) {
var rule = {};
if (item == 'equals') /* special condition because 'equalTo' never makes it into this if block */
rule['equalTo'] = $(this).data(item);
else
rule[item] = $(this).data(item);
$(this).rules("add", rule);
}
});
});
問題は$('input[data-' + item + ']')
セレクターにあるようでした。何らかの理由で、data-equalTo を選択していませんでした。予約されていますか、何らかの理由で jQuery 経由で選択できませんか?
現在、Yoshi のフィードバックに基づいて作業しています。
['minlength', 'maxlength', 'range', 'min', 'max', 'equalTo'].forEach(function (item) {
$('input[data-' + item + ']').each(function () {
var lowerItem = item.toLowerCase();
if ($(this).data(lowerItem)) {
var rule = {};
rule[item] = $(this).data(lowerItem);
$(this).rules("add", rule);
}
});
});