表单序列化之后的字符串为:name=老王&email=1234@qq.com&tell=1234&company=老王&text=咨询内容
现在想判断name、tell、text这三个字段是否为空,如果为空则跳出提示,谢谢!
`$("#submit").click(function(){
var data = $("#form").serialize();
var array = data.split('&');//把字符串按&号分隔成数组
for(var i = 0; i < array.length; i++){
var kwarr = array[i].split('=');//循环将数组中的每个子元素字符串用=号分隔
if(kwarr[1]===null || kwarr[1] ===''){
alert('请填写您的姓名');
return false;
}
}`
上面这段代码运行有问题
###建议是封装一个校验的function。如果只是一个地方用,只是校验几个字段不为空那也倒是不必那么麻烦。可以参考一下下面的代码。只是示例,想封装成一个校验的比较完美的工具库还有需要很多完善的地方,如果只是临时用一下比如像题目中所说的仅仅只是校验下不为空,那可以稍微简化下,总之就是理解原理
const validate = {
required(value) {
return Boolean(value);
},
maxlength(value, length) {
return typeof value == 'string' ? value.length < length : false;
}
}
function validateFormData(rules, str) {
const data = str.split('&').reduce((res, item) => {
const kv = item.split('=');
res[ kv[0] ] = kv[1];
return res;
}, {})
const invalides = rules.filter(({key, rule}) => {
const value = data[key];
return !Object.keys(rule).every(method => validate[method](value, rule[method]));
})
return invalides;
}
validateFormData([{
key: 'name',
rule: {
required: true,
},
message: '名字不能为空'
}], 'name=老王&email=1234@qq.com&tell=1234&company=老王&text=咨询内容')