我正在尝试将一组复选框作为我在WordPress的管理区域创建的整体表单的一部分进行验证。基本上,是自定义字段。下面是代码的样子:
<div><label><input type="checkbox" value="0-2" name="_ecp_custom_5[]" /> 0-2</label></div>
<div><label><input type="checkbox" value="3-5" name="_ecp_custom_5[]" /> 3-5</label></div>
<div><label><input type="checkbox" value="6-8" name="_ecp_custom_5[]" /> 6-8</label></div>
诸如此类……
所以我的JavaScript里有这个:
jQuery(document).ready(function($) {
$('[name="_ecp_custom_3"]').attr("required", true);
$('[name="_ecp_custom_5[]"]').prop("checked", true);
});
文本字段的第一行,效果很好。但下面选中的那个根本不起作用。如果我提交表单时没有选中任何复选框,表单仍然会发布,当表单返回时,所有字段都会被选中,即使我没有选中任何字段。
我不知道该怎么做,因为在这个验证函数中会有几个规则。
发布于 2019-03-13 09:29:03
如果您使用的是html:
html元素名称和id不能包含特殊字符,例如
[ ]
,并且必须以字母(A-Z)、(a-z)开头。
除此之外,您的jQuery引用了一个带有name=_ecp_custom_5
而不是name=_ecp_custom_5[]
的元素。只需删除名称中的[]
,您的代码就可以正常工作。
更新
$('[name=foo]').prop("checked", true)
将all复选框设置为选中的name=foo
。我对您在这一点上所问的问题有点困惑,因为您似乎对为什么表单提交所有复选框输入都是选中的感到困惑?
发布于 2019-03-13 14:00:00
您希望要求至少选中一个复选框,对吗?
可以使用jQuery.each()迭代具有"_ecp_custom_5[]"名称属性值的所有输入。这样,您就可以创建将在任何条件下使用的任何标志变量。
如果你不能理解我想要说的话,请参考下面的片段。
如果您希望要求至少选中一个复选框,则可以使用此示例作为基础
$(function() {
$('#btnValidate').click(function() {
var flag = false;
$.each($('[name="_ecp_custom_5[]"]'), function(index, value) {
var checkboxStatus = $(this).prop('checked');
if (checkboxStatus == true) {
flag = checkboxStatus;
}
});
if (flag == false) {
alert('No checkbox has been checked')
} else {
alert('Success!')
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<label>
<input type="checkbox" value="0-2" name="_ecp_custom_5[]" /> 0-2
</label>
</div>
<div>
<label>
<input type="checkbox" value="3-5" name="_ecp_custom_5[]" /> 3-5
</label>
</div>
<div>
<label>
<input type="checkbox" value="6-8" name="_ecp_custom_5[]" /> 6-8
</label>
</div>
<button id="btnValidate" style="margin-top: 20px;">Validate</button>
我是怎么做到的?
我使用"_ecp_custom_5[]".的name属性值迭代了所有输入
然后,我创建了一个名为“”(默认值为false)的布尔变量,仅当迭代中的复选框的属性(‘’)值为true时,该变量才会被更改为true。如果没有选中任何复选框,那么“”变量的值将保持为false,然后将由我的条件选中。
https://stackoverflow.com/questions/55132220
复制相似问题