2013-09-24 98 views
1

我有我想验证一个表单有两个字段:jQuery验证:验证一个字段,或者需要对两个领域

<div class="entryForm"> 
    <div class="formField"> 
     <label for="fieldEmailAddress">Email address:</label> 
     <input type="email" name="fieldEmailAddress" id="fieldEmailAddress"/> 
    </div> 
    <div class="formField"> 
     <label for="fieldMobileNumber">Mobile number:</label> 
     <input type="text" name="fieldMobileNumber" id="fieldMobileNumber"/> 
    </div> 
</div> 

这里是我的jQuery验证wireup:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#form1').validate({ rules: { fieldMobileNumber: { phoneUS: true } } }); 
    }); 
</script> 

我想要做的是添加一个额外的验证规则:如果fieldEmailAddress和fieldMobileNumber都为空,则表单无效。换句话说,我想使它至少需要fieldEmailAddress或fieldMobileNumber中的一个。看起来大多数jQuery Validation自定义方法都被设计为一次只能处理一个字段 - 我需要验证两者。

任何想法?

+0

是否需要在“验证”插件内完成? – doitlikejustin

+1

@doitlikejustin - 我正在使用jQuery验证来验证当前窗体。我认为有一种方法可以根据我的规则使用jQuery验证来验证这些字段,我想我可以使用它。我会仔细看看你的答案(这里是EOD),​​但它看起来非常有潜力。 –

+0

只需使用'additional-methods.js'文件中包含的'require_from_group'方法即可。 – Sparky

回答

1

你只需要包括the additional-methods.js file并使用require_from_group方法。

require_from_group: [x, '.class'] 

// x = number of items required from a group of items. 

// .class = class assigned to every form element included in the group. 

jQuery的

$(document).ready(function() { 

    $('#form1').validate({ 
     rules: { 
      fieldMobileNumber: { 
       phoneUS: true, 
       require_from_group: [1, '.mygroup'] 
      }, 
      fieldEmailAddress: { 
       require_from_group: [1, '.mygroup'] 
      } 
     }, 
     groups: { 
      theGroup: 'fieldMobileNumber fieldEmailAddress' 
     } 
    }); 

}); 

添加class="mygroup"给每个你需要组合在一起输入...

<input type="email" name="fieldEmailAddress" id="fieldEmailAddress" class="mygroup" /> 

最后,根据需要使用groups选项忍下消息成一个...

groups: { 
    theGroup: 'fieldMobileNumber fieldEmailAddress' 
} 

工作DEMOhttp://jsfiddle.net/CYZZy/

如果你不喜欢的验证消息放在哪里,这就是你要使用errorPlacement回调函数调整它。

+0

我希望他们有更多关于additional-methods文件的文档。我会确保下次再仔细阅读。谢谢! –

+1

@ J.Polfer,不客气。是的,它没有很好的记录,但是你可以在[additional-methods.js'文件]的注释中找到[http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/additional- methods.js) – Sparky

1

您可以绕过验证插件并做了检查类似如下:

$("#form1").submit(function() { 
    var email = $('#fieldEmailAddress'); 
    var phone = $('#fieldMobileNumber'); 

    if(email.val() == '' && phone.val() == '') { 
     alert('Fill out both fields'); 
    } 
    else if(email.val() == '') { 
     alert('Email, please...'); 
    } 
    else if(phone.val() == '') { 
     alert('Phone, please...');  
    } 
    else { 
     alert('Yay!'); 
    } 
});