jquery validate-根据条件切换字段集(带有嵌套的必需字段)
jquery validate - toggle fieldset (with nested required fields) based on conditions
Jquery大师们,我一直在为这件事绞尽脑汁。我正在为表单呈现系统构建一个客户端表单验证层,该系统输出这样的标记(最小示例):
<form name="someName" action="someAction">
<label for="1">Product</label>
<select id="1" name="1">
<option value="">Please Select</option>
<option value="shoe">Shoe</option>
<option value="hat">Hat</option>
<option value="vest">Vest</option>
</select>
<!-- this fieldset would be enabled if select (id:1) IS NOT blank -->
<fieldset data-dep-values="" data-dep-operator="!=" data-dep-id="1" class="dependant">
<label for="2">Brand</label>
<input type="text" id="2" name="2" class="required">
</fieldset>
<!-- this fieldset would be enabled if select (id:1) IS blank -->
<fieldset data-dep-values="" data-dep-operator="=" data-dep-id="1" class="dependant">
<label for="3">Other Product</label>
<textarea id="3" name="3" class="required"></textarea>
</fieldset>
<!-- this fieldset would be enabled if select (id:1) equals "shoe" OR "vest" -->
<fieldset data-dep-values="shoe|vest" data-dep-operator="=" data-dep-id="1" class="dependant">
<label for="4">Material</label>
<textarea id="4" name="4" class="required"></textarea>
</fieldset>
<input type="submit">
</form>
示例中需要注意的一些事项:
- 所有"可能"是必需的字段都用类"必需"标记
- 字段和字段集可以标记为"依赖",这意味着"如果"满足表单中的某些条件,它们应该是必需的。在上面的例子中,字段集元素上的数据属性表示逻辑
这是我的问题。
- 验证插件是否可以向所有字段添加侦听器,即使不是必需的或基于格式的,如数据、int、电子邮件等。我需要检测所有字段的更改,以测试该字段是否有任何"依赖项"。然后,我需要根据依赖性需求测试该值
- 如果一个相关字段或一组字段被隐藏(不满足要求),它仍然会有标记为必需的字段。如果父级(从属组)未启用(不满足从属关系),Validate是否可以跳过这些字段
我想它会这样运行:
- 倾听每次输入的变化
- 当字段发生变化时,在表单中搜索
$('.dependant[data-dep-id="idOfChangedInput"]')
,然后测试条件。如果为true,则显示依赖项,并在"验证"规则中包括任何子"必需"字段。同时隐藏和禁用任何以前启用的从属项(如果条件不再满足)
这是一个逻辑难题,后果不堪设想。
我必须相信有一个相当基本的方法来建立这个规则,但我尝试的一切都失败了。
任何见解或建议都将不胜感激。
干杯!
使用默认属性为每个字段集设置id。假设第一个字段集
<fieldset id="fs1" disabled="true"
用于第二个字段集
<fieldset id="fs2"
用于第三个字段集
<fieldset id="fs3" disabled="true"
你必须编写一个JS函数,这将是最有可能的。
function enableDisableFS() {
var value = $("#1").val();
if (value != "") {
$("#fs1").removeProp("disabled");
$("#fs2").prop("disabled", true);
if (value == 'shoe' || value == 'vest') {
$("#fs3").removeProp("disabled");
} else {
$("#fs3").prop("disabled", true);
}
} else {
$("#fs2").removeProp("disabled");
}
}
并将onchange()属性添加到您选择的中
<select id="1" name="1" onchange="enableDisableFS()">
如果您想在提交时验证表单,请编写另一个JS函数。
function validate() {
// if else validate do here depending on your conditions.
if (valid) {
document.forms[0].submit;
} else {
alert('Validation failed');
}
return false;
}
您的提交按钮
<input type="button" onclick="return validate()">
相关文章:
- 更新嵌套对象的多个字段
- 无法格式化keystone.js中的嵌套日期字段
- 设置'dependensOn'用于keystoneJS中的嵌套字段
- 编码为深度嵌套对象的 HTML 字段 json
- 一个发布对另一个发布隐藏嵌套字段
- 如何访问嵌套的表单ng包含范围/字段
- jquery validate-根据条件切换字段集(带有嵌套的必需字段)
- 计算表单中的嵌套字段集
- 使用ramda.js中的嵌套字段进行排序
- 对嵌套表单中的新字段重新应用 jquery - Rails 3
- 访问嵌套的 json 数组字段
- 在 Sails.js(吃水线)中的嵌套字段(关系内)上的搜索结果
- 猫鼬必填字段嵌套架构
- 如何使用jquery获取行字段(嵌套对象)的值
- 如何使用角度 JS 添加嵌套的添加字段
- 以嵌套形式动态生成的字段添加了两次 Rails
- rails link_to_add_fields 以嵌套形式将每个字段添加两次
- 输入字段在嵌套的 AngularJS 重复中失去焦点
- “嵌套模型表单”可以正确添加新字段,但 coffeescript 行为不会影响页面上现有字段等新字段
- 如何从嵌套函数访问构造函数的方法/字段