Jquery根据另一个字段的输入和目标字段的输入进行验证

时间:2014-12-04 00:52:09

标签: javascript jquery ruby-on-rails ruby-on-rails-4 jquery-validate

如果未填写另一个字段或填写目标字段IS,我如何设置输入字段?

我有两个高度......英寸和英尺的字段。我想基于彼此制作所需的字段。我能够获得要求使用函数

"user[height][inches]":{
    required: function(element) {
       return (!$("input[name='user[height][feet]']").hasClass('valid'));
    },

我为脚做了同样的事情并且效果很好。我需要的下一步是范围验证,但前提是该字段是必需的,或者如果不是必需的,但无论如何都要填写。我能够使用Depends

range: {
   param: [1, 120],
   depends: function(element) {
   // if feet is not filled out then require inches range
   if (!$("input[name='user[height][feet]']").hasClass('valid')){
      return true;
   // else if feet is filled out and inches is not blank or 0 then require range
   } else if ( $("input[name='user[height][inches]']").val() != "" && $("input[name='user[height][inches]']").val() != "0" ) {
      return true;
   // else feet is filled out and inches is blank or 0 so do not require range
   }  else {
      return false;
   }

我似乎无法使用Number要求使用它。它仅适用于FIRST验证,但当用户再次尝试使用非数字时,它会接受它。

        number: function(element){
            // if feet is not filled out then require number input
            if (!$("input[name='user[height][feet]']").hasClass('valid')){
              return true;
              // else if feet is filled out and inches is not blank
            } else if ( $("input[name='user[height][inches]']").val() != "" ) {
              return true;
              // else feet is filled out and inches is blank so do not require
            }  else {
              return false;
            }
        }

我也试过......

        number: {
            depends: function(event){
               // if feet is not filled out then require number input
               if (!$("input[name='user[height][feet]']").hasClass('valid')){
                 return true;
              // else if feet is filled out and inches is not blank
               } else if ( $("input[name='user[height][inches]']").val() != "" ) {
                 return true;
              // else feet is filled out and inches is blank so do not require
               }  else {
                 return false;
               }
             }
           }

我的字段表单是

<input type="number" name="user[height][inches]" placeholder="11"/> 
<input type="number" name="user[height][feet]" placeholder="4"/> 

我注意到如果我在验证期间调试当我调用$(“input [name ='user [height] [inches]']”)。val()它返回“”即使输入值是“字符串”,我相信这是因为它没有通过验证,但我也认为它破坏了我的逻辑。

另一个问题可能是,最初它正在检查脚字段是否为“有效”并且它返回false但是它似乎在最初为假之后,一旦填写了英寸字段然后设置为验证,然后在第二次尝试时破坏验证逻辑。

这是我的JFiddle,但我无法复制,因为它正确验证了一个数字,甚至没有包含验证要求...... http://jsfiddle.net/sza51q6s/1/

我可能要完全重新评估我的逻辑。只有在未填写其他字段或填写当前字段时,如何才能使目标字段成为必需字段?

3 个答案:

答案 0 :(得分:2)

工作示例

http://codepen.io/anon/pen/MYaLXv

<form>
  <input type="checkbox" id="check"/>
  <label for="check">Make text input required</label><br/>
  <input id="input" type="text"/>
  <button type="submit">Try to Submit </button>
</form>

的jQuery

$("#check").on('change' function() {
  if ( this.checked ) {
    $("#input").attr('required', true);
  } else {  
    $("#input").attr('required', false);
  }
});

答案 1 :(得分:0)

我以前见过这个问题,问题是某些浏览器在输入非数字时如何处理type="number"字段(value最终为空,所以插件确实会看到条目和字段被视为空)。试试type="text",看看它是否有所作为。

否则,请确保您拥有最新版本的jQuery Validate(1.13),因为最近修复了与type="number"问题相关的错误。

答案 2 :(得分:0)

Jquery One Field Validation取决于另一个字段输入

   'document': {
                required: function(element){
                    return $("#document_title").val()!="";
                }
            }