为什么我的函数在jQuery Validation Plugin中的规则中不返回false?

时间:2018-03-17 14:28:33

标签: javascript jquery jquery-validate

在jQuery Validation Plugin中,我有一个输入字段规则,如果隐藏输入的val等于1,则应设置为false,如果为2,则设置为true。

我在输入字段的一个规则中创建了一个函数,在那里我查找隐藏的输入值,并根据数字返回true或false。但是,无论怎样,它都会返回true,即使我可以看到它应该返回false。见JSfiddle

HTML:

<form>
  <input type="hidden" name="pick" value="1"/>
  <label>Username:</label>
  <input name="user" id="user" type="text"/>
  <input type="Submit"/>
</form>

jQuery的:

$('form').validate({
    rules: {
    user: {
        required: true,
        email: function(){
          if($('input[name="pick"]').val() == 1){
            console.log('Email shold be false');
            return false;
          }else{
            return true;
        }
      }
    }
  }
});

为什么&#34;返回false&#34;不工作?我可以在控制台中看到&#34;电子邮件应设置为false&#34;

注意:这只是我想要实现的一个例子。我将有更多的输入和规则变化。此外,隐藏的输入字段是由其他度量生成的(不是像示例中的两个按钮)。我知道我可以制作2个表单,但我宁愿用1表示,因为会有很多变化,需要很多表单/双js代码。

2 个答案:

答案 0 :(得分:2)

  

&#34;为什么我的函数在jQuery Validation Plugin的规则中不返回false?&#34;

不是。 email规则是将您的函数视为布尔值并将其仅仅存在解释为&#34;而不是false&#34;从而启用规则。

为了在这里使用一个函数,它需要在the depends callback parameter之内。

此外,由于您需要首先获取布尔值,因此不需要if / else语句;只需return条件语句的结果。

将条件翻转为&#34;不等于&#34; (!=),因此当隐藏值为email时,不会强制执行1规则。

rules: {
    user: {
        required: true,
        email: {
            depends: function(element) {
                return ($('input[name="pick"]').val() != 1);
            }
        }
    }
}

工作演示:jsfiddle.net/v4bf1mvj/

答案 1 :(得分:1)

您不应将email设置为函数(email: function(){})。

您应该设置email对象的属性,以便框架可以读取它所需的内容。

所以要将自己的函数放在email中进行验证(返回true或false),你应该这样做:

$('form').validate({
            rules: {
                user: {
                    required: true,
                    email: {
                        depends: function () {
                            var checkValue = $('input[name="pick"]').val() == 1;
                            return checkValue;

                            // Or this - depending on your requirements.
                            // return !checkValue;
                        }
                    }
                }
            }
        });