相同Jquery Validation Plugin实现两页面一正常一失效问题排查
jQuery Validation Plugin 双页面验证失效排查方案
我有两个代码完全一致的HTML页面,均使用Jquery Validation Plugin验证必填的仅数字字段。第一个页面可正常运行,第二个页面验证功能却失效,请问问题出在哪里?以下为可正常运行的代码:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title></title> <link href="bootstrap.css" rel="stylesheet"></link> <link href="app.css" rel="stylesheet"></link> <script type="text/javascript" ...
嘿,这种“代码看起来一样但一个能用一个不行”的问题我碰到过好多次,大概率是那些容易被忽略的细节在搞鬼。给你列几个最靠谱的排查方向,按顺序来基本能搞定:
- 资源加载的坑:先检查第二个页面的jQuery和Validation插件有没有正确加载。比如你引用的
bootstrap.css、app.css或者JS文件的相对路径,会不会因为第二个页面所在的目录层级和第一个不一样,导致文件找不到?还有加载顺序必须是先加载jQuery,再加载Validation插件,不然插件找不到$对象直接罢工。打开浏览器控制台(F12)看看,有没有404错误或者$ is not defined这类报错,一查一个准。 - DOM元素的属性差异:别光看代码结构,仔细核对两个页面的表单、输入框的
id和name属性。Validation插件是靠name属性(或者配置里指定的元素)绑定验证规则的,哪怕只是把numberInput写成numInput,规则就绑定不上了。 - 初始化时机不对:第一个页面的验证初始化代码是不是放在
$(document).ready()里了?如果第二个页面的初始化代码直接写在<head>里,DOM还没加载完就执行,插件找不到表单元素,自然不会生效。一定要确保初始化代码在DOM完全就绪后运行,比如:$(document).ready(function() { $("#yourForm").validate({ rules: { numberField: { required: true, digits: true } }, messages: { numberField: { required: "这是必填项哦", digits: "只能输入数字哦" } } }); }); - JS冲突问题:第二个页面是不是多引入了其他JS库?比如有些库也用
$当标识符,会把jQuery的$覆盖掉。这种情况可以试试把代码里的$换成jQuery,比如jQuery("#yourForm").validate(...),看看能不能恢复正常。 - 缓存搞的鬼:有时候浏览器会缓存旧的JS文件,第二个页面可能加载的是过期的插件版本。按
Ctrl+F5强制刷新页面,或者清空浏览器缓存再试试,说不定就好了。 - HTML结构的细微错误:比如第二个页面的表单标签有没有闭合?输入框是不是不小心放到表单外面了?Validation插件是绑定在表单上的,输入框不在表单范围内,肯定不会被验证。
你按这个顺序排查,优先看控制台报错,基本能快速定位问题~
内容的提问来源于stack exchange,提问作者Vivek
相关产品推荐
相关产品推荐

