基于Next Prev值的jQuery验证

时间:2016-10-29 14:07:29

标签: javascript jquery jquery-ui jquery-validate

我遇到了这个问题,我用Units和Price指定了Quanitity。如果给出单位,也必须提供价格,如果给出价格,还必须提供单位。但它们都是空白的,那就没关系了。

+----------+-------+
| Quantity | Units |
+----------+-------+
|          |       |
+----------+-------+

我已经使用以下代码来检查这个条件,它确实适用于第一个类实例,但不适用于前一个实例。

$(".Quantity").rules("add",{
        required:function(element){
        return $(".Quantity").next('input').val() > 0;

    },
});

$(".Units").rules("add",{
        required:function(element){
        return $(".Units").prev('input').val() > 0;

    },
});

所以基本上它只检查出现的第一个值而不是其余值。我想要的是它通过完整的页面并比较每个出现的prev next值。在我的情况下,数据排列在表格中,每个单元格包含数量和价格输入框,我想通过prev下一步检索。但它没有用。

Here is codepen demo。请注意,我在示例中也使用了引导对话框,该示例显示了错误的总数,并且它再次在类的第一个实例处停止,而不显示所有错误,因为我使用的是基于类的规则。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

使用此插件的方法,当使用针对多个元素的选择器时,必须将方法包含在jQuery .each() ...

$(".Quantity").each(function() {
    $(this).rules("add",{
        required: function(element) {
            return $(".Quantity").next('input').val() > 0;
        },
    });
});

否则,当您不使用each()时,仅考虑第一个匹配元素。

答案 1 :(得分:0)

自己回答。我必须使用以下代码来解决我的问题

$('.Units').each(function () {
    $(this).rules("add", {
        onkeyup: false,
        required: function (element) {
            return element.nextElementSibling.nextElementSibling.value > 0 ? true : false;
        },
    })
});

$('.Cost').each(function () {
    $(this).rules("add", {
        required: function (element) {
            return element.previousElementSibling.previousElementSibling.value > 0 ? true : false;
        },
    })
});

我使用的实际代码更复杂,其中prev和next值相互依赖。