猫东formValidator对SELECT(单选)控件处理的bug

在formValidator 用户手册中,对inputValidator有如下的一句说明:
“对select-one而言inputValidator里的参数min和max表示选择的索引号范围”
意思就是说,对于单选下拉列表来说,规则中设置的min及max值都表示的是被选中的option的索引值,而不是被选option的value。
例如,我们有如下的表单项:
<select name="select1" id="xueli">
    <option value="0">--请选择你的学历--</option>
    <option value="1">专科</option>
    <option value="2">本科</option>
    <option value="3">研究生</option>
    <option value="4">硕士</option>
    <option value="5">博士</option>
</select> 

我们设置了如下的验证规则:
$("#xueli").formValidator({onshow:"请选择你的学历",onfocus:"学历必须选择",oncorrect:"谢谢你的配合"}).inputValidator({min:1,onerror: "你是不是忘记选择学历了!"});

这条规则就限制了所选的option的索引值至少是1(第一个option的索引为0,第二个为1,依次类推),即不能选择第一个。在数据添加表单中,这条规则合情合理。但是如果是在数据编辑表单中,单选select已经有了默认值(用户可能不需要对已选数据进行修改)这时这个规则就有问题了。


例如,在编辑表单中,我们有如下的表单项:
<select name="select1" id="xueli">
    <option value="1" selected>专科</option>
    <option value="2">本科</option>
    <option value="3">研究生</option>
    <option value="4">硕士</option>
    <option value="5">博士</option>
</select> 

用户可能不会对该项进行修改,这样被选项的索引是0,就不符合规则的最小索引为1的约束,该表单项就会被验证取值无效。

解决方法有两个:
(1)比较简单的方法,在select中增加一个无效的option,放在索引为0的位置上(起占位作用)。如下所示:
<select name="select1" id="xueli">
    <option value="0">--请选择你的学历--</option>
    <option value="1" selected>专科</option>
    <option value="2">本科</option>
    <option value="3">研究生</option>
    <option value="4">硕士</option>
    <option value="5">博士</option>
</select> 

这样默认备选项的索引就为1,符合规则的限制。

(2)修改formValidator.js,使其对min和max取值解析为value而非index。
以ver3.2版为例,将546行,如下
if(sType=="select-one" || sType=="select-multiple"){setting.type = "size";}

修改为:
if(sType=="select-one" ){setting.type = "value";}
if(sType=="select-multiple"){setting.type = "size";}

这样,formValidator就会将规则中的min=1理解为select的最小取值为1。

总结:

其实这并不能算formValidator的一个bug,只能说是不太合理。采用方法(1)可以很简单地解决问题。在我们的项目中我采用了方法(2),因为方法(1)是在我写这篇文章的时候才想到的。昨天晕了,竟然没想到这个方法。还是改为方法(1)比较合理,我想这也应该是猫东推荐的方法,希望猫东把这个写在说明文档里,让更多人少走弯路。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值