avalon2表单验证,非必填字段在不填写的时候不能通过验证
avalon2表单验证,非必填字段在不填写的时候不能通过验证
代码
<script>
var vm = avalon.define({
$id: "validate1",
aaa : "",
validate: {
onError: function(reasons) {
reasons.forEach(function(reason) {
console.log(reason.getMessage())
})
},
onValidateAll: function(reasons) {
if(reasons.length) {
alert(reasons[0].getMessage())
} else {
alert('全部通过')
}
}
}
})
</script>
<div ms-controller="validate1">
<form ms-validate="@validate">
<input ms-duplex="@aaa" placeholder="url" ms-rules='{url:true}'>
<p><input type="submit" value="submit"/></p>
</form>
</div>
截图
查看源码 avalon/src/directives/duplex/addValidateField.js 中 validate 方法中
var next = function (a) {
if (field.norequired && value === '') {
a = true
}
......
}
有判断 field.norequired 是否为非必填字段 ,但貌似 norequired 属性从未赋值过
我的解决办法
在源码 avalon/src/directives/duplex/addValidateField.js 改造
代码如下
module.exports = function addField(node, vnode) {
var field = node.__ms_duplex__
var rules = vnode['ms-rules']
if (rules && !field.validator) {
while (node && node.nodeType === 1) {
var validator = node._ms_validator_
if (validator) {
if (rules['required'] === undefined || rules['required'] === false)
field.norequired = true;
field.rules = rules
field.validator = validator
if (avalon.Array.ensure(validator.fields, field)) {
validator.addField(field)
}
break
}
node = node.parentNode
}
}
}
新增了 这么一段 给 norequired 属性赋值 解决了非必填验证的问题
if (rules['required'] === undefined || rules['required'] === false)
field.norequired = true;
但不知道此方法是否是合理?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
等下一个版本,我添加一个新的norequired规则