ASP.NET MVC Unobtrusive验证不适用于IE9

时间:2014-07-18 14:09:10

标签: asp.net-mvc jquery-validate client-side unobtrusive-validation

我正在处理其他人编写的代码。 它是一个重置密码表单。当前的客户端验证适用于大多数浏览器,包括IE 10和IE 11.在IE 9上,确认密码不匹配错误仍然显示,即使我确定我在两个字段中输入完全相同的东西。 代码:

<div class="form-group">
        <div class="input-group input-phone">
            <span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
            <input type="password" id="Password" name="Password" class="form-control input-lg default-focus" data-val="true" data-val-required="Password is required." placeholder="Password" autocomplete="off">
        </div>
        <div class="field-validation-valid" data-valmsg-for="Password" data-valmsg-replace="true"></div>
    </div>

    <div class="form-group form-group-login-bottom">
        <div class="input-group input-pin">
            <span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
            <input type="password" id="ConfirmPassword" name="ConfirmPassword" class="form-control input-lg" data-val="true" data-val-equalto="Confirm Password does not match." data-val-equalto-other="*.Password" placeholder="Confirm Password" autocomplete="off">
        </div>
        <div class="field-validation-valid" data-valmsg-for="ConfirmPassword" data-valmsg-replace="true"></div>
    </div>

昨天我搜索了很多,但解决方案似乎都没有用。 我尝试过:更新jquery.validate.js和jquery.validate.unobtrusive.js文件。

我尝试在jquery.validate.js文件中调试此代码段,

// http://docs.jquery.com/Plugins/Validation/Methods/equalTo
    equalTo: function( value, element, param ) {
        // bind to the blur event of the target in order to revalidate whenever the target field is updated
        // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
        var target = $(param);
        if ( this.settings.onfocusout ) {
            target.unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {
                $(element).valid();
            });
        }
        return value === target.val();
    },

目标id Password的输入字段。在IE 10和IE 11上,警告target.val() 返回正确的type in值。在IE 9上,它返回空。无法弄清楚为什么它在IE 9上不起作用。任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:3)

您使用的是什么版本的jQuery,jQuery验证和ASP MVC? 我刚刚使用你的html创建了a fiddle并包含了这些库的最新版本(jquery 2.1.0,验证1.13和来自MVC 5的验证 - 不引人注意)。我验证了IE9上的验证工作(我的版本是9.0.8112.16421)

但是我找到了this issue,这意味着您可能会在IE9中发现此错误,页面上的html不正确。您可以确保没有任何打开的代码(例如<p>没有相应的</p>)。例如,如果在小提琴中你只是在<p>之前添加<form>,验证将停止在IE9中工作,而不是在Firefox中。 (请参阅此updated fiddle不适用于IE9)

如果这没有帮助,我会检查您的页面中可能会干扰的库版本和任何其他库(如果您可以在一个非常好的小提琴中复制您的问题!)。如果没有任何帮助,您可以尝试从小提琴中删除validate-unobtrusive库(将其添加到外部引用上)并取消注释JS代码以手动使用验证插件。至少可以让你知道问题是与jquery.validate有关还是与微软的jquery.validate-unobtrusive相关:

//This is commented in the fiddle. Only uncomment to try jquery.validate without jquery.validate-unobtrusive
$(document).ready(function () {
    $("#testForm").validate({
        debug: false,
        rules: {
            Password: {
                required: true
            },
            ConfirmPassword: {
                required: true,
                equalTo: "#Password"
            }
        },
        submitHandler: function (form) {
            // just for the fiddle demo
            alert('valid form submitted');                 
            return false;
        }
    });
});