15

我正在使用当前版本的 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 突然开始发生的事实所引发。

由于这只是仿真的问题,而不是真实的问题,因此这里没有什么要解决的;我应该首先披露它是通过模拟器实现的......但也许其他人会落入同样的陷阱,这将是一个有用的参考。

4

1 回答 1

0

试试这个...

使用内置 jQuery 1.8.2 的 jsFiddle DEMO

使用 jQuery 1.8.3 的 jsFiddle 演示

$(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();
        }
    });

});​
于 2012-12-17T23:39:12.177 回答