0

我试图连接 jQuery Validator 插件以使用数据属性而不是直接属性(例如:data-minlength 代替 minlength,data-equalTo 代替 equalTo),以便我的标记将验证为有效的 HTML5。在我到达 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);
        }
    });
});
4

1 回答 1

2

使用 jquery,您必须以小写形式访问数据属性。在你的情况下:

$(somelement).data('equalto');

如果这是不需要的,请尝试attr

$(somelement).attr('data-equalTo');

但是,在这种情况下,您不会从 jquery 获得自动解析。


演示:http: //jsfiddle.net/BS6wy/1/

<div id="foo" data-equalTo="42"></div>​

<script>
  console.log(
    $('#foo').data('equalTo'), // undefined
    $('#foo').data('equalto'), // 42 (as number)
    $('#foo').attr('data-equalTo')  // "42" (as string)
  );​
</script>
于 2012-08-13T17:15:46.643 回答