如图:
这是一个表格,里边有select,现在获取到了一个关于所有下拉菜单的值的字符串。
想把它们切成单独的数据存进数组,目前没有思路,求各位老哥给个思路= =
**
**
获取到的字符串是:“年终汇算2005年核定征收预缴-月度2016年请选择查账征收预缴-季度2008年第四季度核定征收”。
也就是说,所有的select选择的值都连在一起了,我没有切开的思路了。
最后想弄成
[{type:"年终汇算",time1:"2005年",time2:"",fangs:"核定征收"},{type:"预缴-月度",time1:"2016年",time2:"2月",fangs:"查账征收"},{type:"预缴-季度",time1:"2008年",time2:"第四季度",fangs:"查账征收"}]
就是最后想存成这种样子。
**
**
这其中选项,如果用户没选,就会显示“请选择”,请问如何才能判断不让这些值里出现“请选择”呢?(也就是说,不能不选就提交,要每个选项都选了,才能提交存储数据)。
PS:1.我的年度和月度季度的选项不一样的,上边是二级联动,下边月度季度是三级联动
2.我这个select是在table的trtd里写的,而这些,都是有个"添加"按钮动态生成的。
不好意思刚才忘记说这两点了,补充一波-.-
1、非常不建议用切分的方式来做,应该想办法优化 “获取已选择” 的项目,使得这些字段天然就是带结构的。
用切分的方法来做的话,将来维护成本也很高的。
2、在表单提交代码里,依次获取每个选项的值,进行合法性判断。实际上,这也是通用的做法。
下拉选择和取值思路
以下为我的思路
每个行实例都具有一个
value
对象,如:this.value = {}
;行内的
select
使用标准的数字值,用以比对数组下标,确保取值的准确;每个
select
的change
事件都会修改一个对应的值,如:第一个select.type
选中时,在联动代码之前添加this.value.type = $type[0].value
的change
事件都会修改一个对应的值,如:第一个select.type
选中时,在联动代码之前添加this.value.type = $type[0].value
—— 自行代入对应的变量;使用隐藏域来管理输出,如:
<input type="hidden" name="name[]" />
;你可以使用任意的数据格式,个人建议尽量使用数字,如:
最后的
select.fangs
选择时会生成可用数据,以供表单使用,如:关于验证
扩展一个 验证方法,如:
AppRow.prototype.validate()
,该方法根据this.value
的内容监测表单的合法性,并返回一个布尔值,如:首先是否为空对象,是,则说明本行第一个
select
为请选择
,返回false
为请选择
,返回false
;如果选择了
.type - 0 - 年度汇算
(第一个.type - 0 - 年度汇算
(第一个select
),则获取AppRow.typeChose[this.value.type]
),则获取AppRow.typeChose[this.value.type]
对象;对象不存在,说明可能是越界,如根本不存在
AppRow.typeChose[4]
, 返回false
;根据所选
AppRow.typeChose[this.value.type].types
得出typeSubLen
当前类型对应的后面表单的数量,即当前类型应该有几个相关的子级;如果
(this.value.length - 1) < typeSubLen
说明长度不足,缺少参数,又或!this.value.time1
不存在,返回false
;this.value.time1
存在,值=== -1
或!AppRow.typeChose[0].types[this.value.time1]
,返回false
;this.value.time2
存在,值=== -1
或!AppRow.typeChose[0].types[0].zType_time1[this.value.time1]
,返回false
;!this.value.fangs
或this.value.fangs === -1
,返回false
;条件都满足,返回
true
;