概述:
在我的表单中,我有一个需要远程验证的字段.在远程调用中,我发送表单元素的值以及该元素可能依赖的其他几个表单元素的值(在服务器上用于验证).
远程验证在被调用时效果很好.问题是只有在表单元素中有值时才会调用远程验证.根据发送到远程验证的参数,可能需要此表单元素,或者可能存在其他验证问题.
如何在此字段强制进行远程验证是否包含数据?
特定场景:
获得角色列表和销售员代码文本输入.
服务器端逻辑:(1)如果选择了销售人员角色,则需要销售人员代码; (2)如果未选择销售人员角色,则salespersoncode必须为空.
请注意,我确实有其他表单元素值发送到服务器,并且还有其他服务器端逻辑,为了简洁我没有在这里包含,因为它们不会增加这个问题的价值,只会混淆事情.
<select name="roles" id="roles" multiple="multiple" size="5"></select>
<input type="text" name="salespersoncode" id="salespersoncode" />
$("#add_user_form").validate({
rules: {
salespersoncode: {
remote: {
type: "post",
url: "/AdminJson/CheckSalespersonCode",
dataType: "json",
data: {
salespersoncode: function () { return $("#salespersoncode").val(); },
roles: function () { return $("#roles").val(); }
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不想放入"必需"验证选项,因为在所有情况下都不需要salespersoncode字段.
我的问题是:如何在salespersoncode字段强制进行远程验证是否包含数据?
提前致谢
在调用validate()方法之前添加这段代码:
$.validator.methods._required = $.validator.methods.required;
$.validator.methods.required = function( value, element, param )
{
if ( $(element).is('[remote-validator]') && !$(element).hasClass('required') )
return true;
return $.validator.methods._required.call( this, value, element, param );
}
Run Code Online (Sandbox Code Playgroud)
看起来您不能拥有一个具有远程验证功能的表单元素,而不需要进行必要的验证。它最终导致依赖不匹配。
远程方法中的第一行是检查它是否是可选的 - 如果是可选的,则返回依赖项不匹配。(可选与远程相反)
我想出的解决方案是对“必需”规则使用依赖回调。在“required”规则的函数中,调用同步 ajax 调用来测试服务器上 UI 中的值并返回 true/false。
| 归档时间: |
|
| 查看次数: |
3212 次 |
| 最近记录: |