我一直在使用jquery validate一段时间,并且刚刚开始使用remote选项。
当我使用输入元素进行远程验证时,它工作得很好(电子邮件,电话号码等)。我现在正尝试使用多选元素。我不明白何时通过远程验证被触发。我第一次在元素中进行选择时,它会触发遥控器并完成它应该做的事情。然后,当我按住Ctrl键单击,按住Shift键单击或单击其他地方时,它并不总是执行验证并调用远程ajax方法。
<!-- HTML snippet -->
<form id="edit_user_form" action="" method="post">
<input type="text" name="username" id="edituser_username"/><br/>
<select name="roles" id="edituser_roles" size="5" multiple="multiple"></select>
</form>
// jquery snippet
$('#edit_user_form').validate({
rules: {
username: { required: true },
roles: {
required: true,
remote: {
type: "POST",
url: "/AdminJson/CheckRolesAllowed",
dataType: "json",
data: {
roles: function () { return $("#edituser_roles").val(); }
}
}
}
},
我还尝试将onfocusout validate选项设置为true以在发生模糊事件时强制进行验证。没有变化。
我甚至连接到blur和change事件处理程序并尝试element,如下所示,但这也不起作用。
$("#edituser_roles").change(function () {
$("#edit_user_form").validate().element("#edituser_roles");
});
$("#edituser_roles").blur(function () {
$("#edit_user_form").validate().element("#edituser_roles");
});
我的问题是:什么时候为多重选择元素调用远程验证?我是否可以强制它同时验证模糊以及何时在多选中进行更改?
提前致谢
答案 0 :(得分:2)
我在调试到jquery.validate.js后找到了答案。答案有几个部分。
第一部分是由于性能原因,验证插件缓存了之前的值(感谢JörnZaefferer提供了正确方向的提示 - With JQuery Validation Plugin, I want to change the remote validation method)。
第二个是当通过远程入口点时,要与前一个值进行比较的当前选择的值始终只是所选的第一个元素,而不是整个元素列表。因此,当您更改选择列表选择但不更改第一个选定项目时,验证插件无法识别所选项目中的更改。
解决方案是在Jörn推荐的变更处理程序中自行清除以前的值(建议用于其他目的,但也适用于此处。)
$("#edituser_roles").change(function () {
$("#edituser_roles").removeData("previousValue");
});
因为我想在每次更改选择时(通过按住Ctrl键单击,按住Shift键单击或单击)完成远程验证而不必模糊元素,所以更改处理程序已经扩展到以下内容: / p>
$("#edituser_roles").change(function () {
$("#edituser_roles").removeData("previousValue");
$("#edit_user_form").validate().element("#edituser_roles");
});