jquery 远程验证 - 验证字段中的数据是不是
Posted
技术标签:
【中文标题】jquery 远程验证 - 验证字段中的数据是不是【英文标题】:jquery validation remote - validate whether data in field or notjquery 远程验证 - 验证字段中的数据是否 【发布时间】:2011-10-01 15:24:51 【问题描述】:一般说明: 在我的表单中,我有一个需要远程验证的字段。在远程调用中,我发送表单元素的值以及该元素可能依赖的其他几个表单元素的值(在服务器上用于验证)。
远程验证在调用时效果很好。问题是只有在表单元素中有值时才会调用远程验证。根据发送到远程验证的参数,可能需要此表单元素或可能存在其他验证问题。
如何强制远程验证该字段是否包含数据?
具体场景: 有一个角色列表和一个销售员代码文本输入。 服务器端逻辑:(1)如果选择了salesperson角色,需要salespersoncode; (2) 如果没有选择salesperson角色,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();
我不想输入“必需”验证选项,因为并非在所有情况下都需要 salespersoncode 字段。
我的问题又来了:如何强制对 salespersoncode 字段进行远程验证,无论它是否有数据?
提前致谢
【问题讨论】:
【参考方案1】:在调用 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 );
【讨论】:
这里重要的一点是元素必须有一个名为remote-validator的属性!! (没有值的属性很好)。如果您不想添加此属性,而只是每当指定远程规则时使用远程验证,请使用此条件typeof this.settings.rules[ $(element).attr('name') ] != 'undefined' && typeof this.settings.rules[ $(element).attr('name') ].remote != 'undefined'
而不是$(element).is('[remote-validator]')
不过有一个关键点!您需要通过在rules
设置中的remote
对象上设置属性/值async: false
来使远程调用异步。否则你会出现意想不到的行为,例如。 valid() 不会等待服务器的响应。
然后在 MVC / .NET 中添加一个自定义属性,例如 [remote-validator] 我只是使用了添加到元素中的现有属性,如下所示:将 [remote-validator] 替换为: [data-val-remote-url]【参考方案2】:
看起来您不能拥有一个具有远程验证的表单元素,而无需同时进行必需的验证。 它最终导致依赖不匹配。
远程方法的第一行是检查它是否是可选的 - 如果它是可选的,则返回依赖项不匹配。 (可选是远程的倒数)
我想出的解决方案是对“必需”规则使用依赖回调。在 'required' 规则的函数中,调用同步 ajax 调用来测试服务器上 UI 中的值并返回 true/false。
【讨论】:
【参考方案3】:先尝试明确设置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();
【讨论】:
在 validate() 函数中,我看不出如何像您推荐的那样创建局部变量。我已经更新了我的问题,以便在其中包含更多验证方法的详细信息。您介意更新您的答案,告诉我可以在哪里放置本地 var 而浏览器不显示 js 错误?以上是关于jquery 远程验证 - 验证字段中的数据是不是的主要内容,如果未能解决你的问题,请参考以下文章
表单验证 - jQuery 验证是不是足够以及如何巧妙地验证 PHP 中的数据?