我正在处理其他人编写的代码。 它是一个重置密码表单。当前的客户端验证适用于大多数浏览器,包括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上不起作用。任何建议都会有所帮助。
答案 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;
}
});
});