jqueryvalidation远程 – validation数据是否在字段中

概述
在我的表单中,我有一个需要远程validation的字段。 在远程调用中,我发送表单元素的值以及该元素可能依赖的其他几个表单元素的值(在服务器上用于validation)。

远程validation在被调用时效果很好。 问题是只有在表单元素中有值时才会调用远程validation。 根据发送到远程validation的参数,可能需要此表单元素,或者可能存在其他validation问题。

如何在此字段强制进行远程validation是否包含数据?

具体情景
获得了角色列表和销售员代码文本输入。
服务器端逻辑:(1)如果选择了销售人员角色,则需要salespersoncode; (2)如果未选择销售人员角色,则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(); } } } } } } 

我不想放入“必需”validation选项,因为在所有情况下都不需要salespersoncode字段。

我的问题是:如何在salespersoncode字段强制进行远程validation是否包含数据?

提前致谢

在调用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 ); } 

看起来你没有一个没有必要validation的远程validation的表单元素。 它最终导致依赖性不匹配。

远程方法的第一行是检查它是否是可选的 – 如果它是可选的,则返回依赖项不匹配。 (可选是远程的反转)

我想出的解决方案是对“必需”规则使用依赖回调。 在“required”规则的函数中,调用同步ajax调用来测试服务器上UI中的值并返回true / false。

首先尝试显式设置salesPersonCode:

 salespersoncode: { salesPersonCode: ($("#salespersoncode").val().length > 0) ? $("#salespersoncode").val() : "", remote: { type: "post", url: "/AdminJson/CheckSalespersonCode", dataType: "json", data: { salespersoncode: salesPersonCode; }, roles: function () { return $("#roles").val(); } } } }