我在做jquery表单验证的时候用的是监控input的blur事件来做合法性检查,然后把每次检查的结果保存下来,但是有可能出现的问题是:
- 用户先输入合法的字符串,然后tab切换input,这样就产生了一个blur事件,这时候检查的结果是合法的
- 在提交表单之前,把输入改成不合法的,这样由于产生blur事件后不验证的话,是可以合法提交的
问题:做表单验证一般用的是否是blur事件监控?在提交表单前难道要对所有的输入再check一次吗?
我在做jquery表单验证的时候用的是监控input的blur事件来做合法性检查,然后把每次检查的结果保存下来,但是有可能出现的问题是:
问题:做表单验证一般用的是否是blur事件监控?在提交表单前难道要对所有的输入再check一次吗?
你好,使用blur事件监控应该也是可以的。你也可以去观察一下,现在表单验证基本上分为 keyup 类型(就是输入开始就立即验证)和提交型的(当然apple注册那种高级的规则验证我们就不看了)。keyup(blur)这样的做法会有一个用户体验的问题:失去焦点有可能就出现非法的提醒框,这样可能会让人看了很心烦。而提交验证在对于较长的表单验证上不是很友好,你有可能会不知道非法的位置在哪儿。
然而为了数据的准确性,提交的时候的验证是一定必要的。
废话有些多,希望对你有所帮助~
首先有一个我不是很明白的地方。就是你指的第二种情况。当你更改了原先正确的值再提交表单的话,除非是你设置了快捷键提交(例如CTRL+ENTER),否则它仍然会触发blur事件(无论你是点击提交按钮还是直接Enter提交表单),所以我不懂为什么你更改了正确值后可以提交表单而验证却不会报错。
其次,对于验证这个问题,提交表单是一个表单数据传输到服务器的最后一个步骤,无论如何最好都再次检测一遍,这在大部分的表单验证过程中都应该实现的。
我只能说,你的代码有问题。tab也能触发blur事件的。
提供一个提交验证的示例,我写的一个验证插件的其中一段:
formId.on('submit',function(e){
var flag = true;
// 若验证全部完成,则进行表单提交
$.each(validateData, function(i, ele) {
if (!checkObj.check(ele, checkConfig[i])) {
flag = false;
};
});
if ( !! callback && (that.getType(callback) === 'function')) {
//存在回调的情形
flag && callback();
} else {
//使用默认提交的action
// 阻止默认提交
!flag&&e.preventDefault();
// flag && formId.get(0).submit();
}
});
验证事件
验证UI
alert
或相似的提醒框来打扰用户。这个的体验太差了。后端验证不可缺少
千万不要忘了:前端验证为体验,后端验证为安全。表单传输到服务器之后,在后端一定要再次验证一遍,以防非法输入。有任何错误就跳转回表单页,并把错误信息返回去。后端的验证是绝对不可缺少的,否则就是对数据安全的严重失职。必须就是必须,这没有商量的余地,任何诸如“可以”、“最好”、“建议”一类的模棱两可的发言,都是完全不能接受的!