我正在使用当前版本的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和验证插件。
更新:
因此,在使用Internet Explorer F12开发人员工具模拟IE8行为时,问题只会出现。根据评论提示我在IE8中提供的示例没有实际问题,我构建了一个完整的Windows VM,其中安装了真正的Internet Explorer 8,事实上,没有任何问题。虽然模拟器和真实模型之间存在明显的差异,但我之前从未见过JavaScript模拟这样的问题,并且由于jQuery Validation 1.10突然开始发生这一事实而被抛出。
因为它只是模拟的一个问题,而不是真实的问题,所以这里没有什么可以解决的;我应该首先透露它是通过模拟器...但也许其他人会陷入同一个陷阱,这将是一个有用的参考。
答案 0 :(得分:0)
试试这个......
<强> jsFiddle DEMO using built-in jQuery 1.8.2 强>
<强> jsFiddle DEMO using jQuery 1.8.3 强>
$(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"
}
},
submitHandler: function(form) {
alert('passed validation');
// form.submit();
}
});
});