我有一个多部分表单,它在开头时获取基本用户信息,并检查一些jquery.validate错误,以查看字段是否已填写且电子邮件地址是否有效。
下面是新帐户,删除帐户,新软件等的一系列复选框(type_of_request),它们在选中/取消选中时显示/隐藏这些表单元素。
如果已经检查了corressponding type_of_request项,我想验证表单上的必需部分。
更新信息
这是一个很好的解决方案,但似乎需要所选部分的所有孩子。
典型情况是选择了type_request中的电子邮件和其他复选框:
<div id="email" style="display: block;"> // shown because other has been selected in the type request
<input id="email_new_account" class="sq-form-field" type="checkbox" value="0" name="q4836:q1"/> // not required
<input id="email_new_account_name" class="sq-form-field" type="text" name="q4836:q2"/> // if email_new_account checked then make required
<input id="email_new_account_access" class="sq-form-field" type="text" name="q4836:q2"/> // if email_new_account checked then make required
<input id="email_new_account_manager" class="sq-form-field" type="text" name="q4836:q3"/> // if email_new_account checked then make required
<input id="email_add_remove_access" class="sq-form-field" type="checkbox" value="0" name="q4837:q1"/> // not required
<input id="email_add_remove_account_name" class="sq-form-field" type="text" name="q4837:q2"/> // if email_add_remove_access checked then make required
<input id="email_add_access" class="sq-form-field" type="text" name="q4836:q2"/> // if email_add_remove_access checked then make required
<input id="email_remove_access" class="sq-form-field" type="text" name="q4837:q3"/> // if email_add_remove_access checked then make required
</div>
<div id="other" style="display: block;"> // shown because other has been selected in the type request
<input id="other_describe_request" class="sq-form-field" type="text" name="q4838:q1"/> // required because #other was checked in type request
<input id="other_request_justification" class="sq-form-field" type="text" name="q48387:q2"/> // required because #other was checked in type request
</div>
进一步阅读
我对此进行了进一步的审核,发现可以将以下内容添加到输入项的类
中class="{required:true, messages:{required:'Please enter
your email address'}}"
或
class="{required:true, email:true, messages:{required:'Please enter
your email address', email:'Please enter a valid email address'}}"
但是当我添加
class="{required:'input[@name=other]:checked'}"
在http://jquery.bassistance.de网站上描述的,它不起作用。我是否需要更改语法才能使其正常工作?
答案 0 :(得分:3)
假设您使用的是jQuery validation plugin,您可以根据单击的复选框设置/清除所需/非必需部分中每个控件的类。
$(document).ready( function() { $('form').validate(); } );
function init_validation(divName)
{
$('div#' + divName).find('input').addClass( 'required' );
$('div#inputs').children('div:not(#' + divName + ')')
.find('input')
.removeClass( 'required' );
}
HTML:
<form>
<div>
<input type='radio'
id='new_account_radio'
name='interface_selector'
value='new_account'
selected=true
onclick='init_validation("new_account");' /> New Account
<input type='radio'
id='delete_account_radio'
name='interface_selector'
value='delete_account'
onclick='init_validation("delete_account");' /> Delete Account
<input type='radio'
id='new_software_radio'
name='interface_selector'
value='new_software'
onclick='init_validation("new_software");' /> New Software
</div>
<div id='inputs'>
<div id='new_account'>
<input type='text' id='new_account_name' class='required' />
</div>
<div id='delete_account'>
<input type='text' id='delete_account_name' />
</div>
<div id='new_software'>
<input type='text' id='new_software_name' />
</div>
</div>
</form>
答案 1 :(得分:1)
我最终使用的解决方案是从http://bassistance.de/jquery-plugins/jquery-plugin-validation/链接jquery.validate.js和jquery.metadata.js
然后,我在表单顶部有一个请求类型的检查列表,当您检查项目时显示/隐藏id元素(显示/隐藏功能未显示)。
<fieldset id="request-type">
<legend>Type of Request</legend>
<ul>
<li><input type="checkbox" name="q4838:q1[]" id="q4838_q1_0" value="0" class="sq-form-field" /><label for="q4838_q1_0">New account</label></li>
<li><input type="checkbox" name="q4838:q1[]" id="q4838_q1_1" value="1" class="sq-form-field" /><label for="q4838_q1_1">Delete account</label></li>
<li><input type="checkbox" name="q4838:q1[]" id="q4838_q1_2" value="2" class="sq-form-field" /><label for="q4838_q1_2">Change access/account transfer</label></li>
<li><input type="checkbox" name="q4838:q1[]" id="q4838_q1_3" value="3" class="sq-form-field" /><label for="q4838_q1_3">Hardware</label></li>
<li><input type="checkbox" name="q4838:q1[]" id="q4838_q1_4" value="4" class="sq-form-field" /><label for="q4838_q1_4">Software</label></li>
<li><input type="checkbox" name="q4838:q1[]" id="q4838_q1_5" value="5" class="sq-form-field" /><label for="q4838_q1_5">Email</label></li>
<li><input type="checkbox" name="q4838:q1[]" id="q4838_q1_6" value="6" class="sq-form-field" /><label for="q4838_q1_6">Other</label></li>
</ul>
</fieldset>
对于这个例子,我们会说已经检查了“删除帐户”,这将“显示”
<fieldset id="delete-account" style="display: block;">
因为在检查删除帐户选项时需要字段集中的两个输入字段,所以我将以下内容添加到所需输入的class属性中。
class="{required:'#checkboxid:checked', messages:{required:'required error message'}}"
然后“删除帐户”字段集看起来像这样......
<fieldset id="delete-account" style="display: block;">
<legend>Delete Account</legend>
<label for="q4832_q1">Cessation date</label>
<input type="text" name="q4832:q1value[d]" value="" class="{required:'#q4838_q1_1:checked', messages:{required:'Enter Cessation Date'}}" id="q4832:q1value[d]" />
<label for="q4832_q1">List of assets</label>
<input type="text" name="q4832:q2" value="" class="{required:'#q4838_q1_1:checked', messages:{required:'Enter Cessation Date'}}" id="q4832:q2" />
</fieldset>
类中的“required”值通常适用于true或false,即{required:'true', messages:{required:'This field is required'}}
,但在这种情况下,我们在其中放置一个引用而不是标准的true或false,#checkboxid:checked
。如果选中它,则返回'true'
,该字段变为必填字段,如果它返回'false'
,则不需要该字段。
我觉得有用的另一件事是确保有人在表单的开头选择了一个请求类型,方法是在每个复选框的class属性中添加以下内容
class="{required:'true', minlength:1, messages:{required:'Please select a checkbox'}}"
如果您需要多个复选框,则只需添加到minlength。