我正在使用当前版本的 jQuery (1.8.3) 和最新版本的 jQuery validate (1.10.0),似乎在 Internet Explorer 8 中,jquery validate 正在验证正在验证的表单上的所有输入,而不是只是那些有明确规则的人。它在其他浏览器(IE9+、FF、Chrome)中运行良好,如果我使用 jQuery validate 1.9.0 也运行良好。
这是一个演示该问题的示例:
<!DOCTYPE html>
<html>
<head>
<title>IE8 + jQuery Validate 1.10 Test</title>
<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js'></script>
<script type='text/javascript' src='http://ajax.aspnetcdn.com/ajax/jquery.validate/1.10.0/jquery.validate.min.js'></script>
</head>
<body>
<div>
<form id="my-form">
<label for="my-required-field">required:</label>
<input id="my-required-field" type="text" name="reqField" />
<label for="my-optional-field">optional:</label>
<input id="my-optional-field" type="text" name="optField" />
<input id="wh-submit-button" type="submit" value="submit" />
</form>
</div>
<script type="text/javascript">
$(document).ready(function () {
var form = $("#my-form");
var validator = form.validate({
rules: {
"reqField": { required: true }
},
messages: {
"reqField": { required: "this field is <i>actually</i> required" }
}
});
$("#wh-submit-button").click(function () {
if (validator.form()) {
alert('passed validation');
}
});
});
</script>
</body>
</html>
在 IE8 中,“通过验证”警报不会触发,可选字段将被标记为必填。
如果我明确地将可选字段标记为不需要,它确实可以正常工作:
rules: {
"reqField": { required: true },
"optField": { required: false }
}
但是,据我所知,必须将每个不需要明确要求的输入元素标记为可选的,并且这从来都不是以前的要求,这当然不是最理想的。
我知道早期版本的 jquery 和 jquery validate 存在问题,但表面上它们已通过 jQuery validate 1.8.1 解决 - 我提出这个问题是因为它似乎与最新版本的 jquery 和 validate 插件有关。
更新:
因此,该问题似乎仅在使用 Internet Explorer F12 开发人员工具模拟 IE8 行为时才表现出来。根据评论表明我在 IE8 中提供的示例没有实际问题,我构建了一个完整的 Windows VM,并安装了真正的 Internet Explorer 8,事实上,没有任何问题。尽管仿真器和真实的东西之间存在明显的差异,但我以前从未见过 JavaScript 仿真存在这样的问题,并且被 jQuery Validation 1.10 突然开始发生的事实所引发。
由于这只是仿真的问题,而不是真实的问题,因此这里没有什么要解决的;我应该首先披露它是通过模拟器实现的......但也许其他人会落入同样的陷阱,这将是一个有用的参考。