jquery验证远程 - 验证数据是否在字段中

Ed *_*nek 6 validation jquery

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

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

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

特定场景:
获得角色列表和销售员代码文本输入.
服务器端逻辑:(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字段强制进行远程验证是否包含数据?

提前致谢

Daa*_*ers 5

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


Ed *_*nek 1

看起来您不能拥有一个具有远程验证功能的表单元素,而不需要进行必要的验证。它最终导致依赖不匹配。

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

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