我有一个jQuery自动完成文件,它从我的MVC操作中获取现有数据。我希望确保输入到该字段的数据在数据库中不存在。
我在autocomplete上使用.result和.change将字段设置为class =“输入-验证-错误”。当我添加xVal客户端验证时,这仍然有效,但是xVal似乎清除了css类,所以现在字段条目简短地变红,然后返回到清除背景。
与其尝试更改xVal代码,我更愿意让xVal客户端验证以错误状态显示字段,就像正常的客户端数据验证错误一样。
我该怎么做?在自动完成.result事件中可以使用什么代码来强制xVal中的错误状态?
更新:,我尝试了怀亚特·巴内特的想法,但正如你从我的评论中看到的,这不是我想要的。以下是我所拥有的代码:
字段标记:
<p>
<%= Html.LocalisedLabel("ProjectId") %>
<%= Html.TextBox("project.ProjectId") %>
<%= Html.ValidationMessage("project.ProjectId", "*") %>
</p>xVal标记:
<%= Html.ClientSideValidation<ProjectBO>("project").UseValidationSummary("myValidationSummary") %>
<%= Html.ClientSideValidation<ProjectBO>("project").AddRule("ProjectId", new RemoteRule(Url.Action("ValidateProjectIdCreate", "LookUp", new { projectId = Model.ProjectId})))%>自动完成的javascript标记:
<script type="text/javascript">
$(document).ready(function() {
$('#project_ProjectId').autocomplete('<%= Url.Action("ProjectIdList", "LookUp") %>',
{
delay: 10,
minChars: 1,
matchCase: 0,
matchSubset: 1,
autoFill: false,
maxItemsToShow: 10,
cacheLength: 10
}
);
$('#project_ProjectId').result(function(item) {
if (item) {
//match
$('#project_ProjectId').attr("class", "input-validation-error");
}
else {
$('#project_ProjectId').removeAttr("class");
}
});
$('#project_ProjectId').change(function() {
$('#project_ProjectId').attr("class", "");
});
});
</script>这个脚本给了我要处理的事件,但是我能在其中放什么呢?
发布于 2009-09-29 13:41:19
为什么不利用升级到xVal 1.0的ajax验证玩具呢?那样的话,你就不必在这方面与框架作斗争了。
好的,因为这个角度不起作用,也许您可以使用autocomplete.result和jquery (xVal也使用这个)来处理事情。
发布于 2009-09-30 00:00:02
终于解决了。
我在输入字段中使用了jQuery自动完成,通过显示现有数据库条目的查找列表,为用户提供了一些指导。
在退出字段时,通过从自动完成中选择显示的列表项,或者通过键入一个不存在的数据库条目,xVal RemoteValidator触发以设置验证失败条件或清除它。
守则如下:
<%= Html.ClientSideValidation<ProjectBO>("project").UseValidationSummary("myValidationSummary"RemoteRule(Url.Action("ValidateProjectIdCreate",.AddRule("ProjectId",new %>“LookUp”))
自动完成脚本是作为折叠:
<script type="text/javascript">
$(document).ready(function() {
$('#project_ProjectId').autocomplete('<%= Url.Action("ProjectIdList", "LookUp") %>',
{
delay: 10,
minChars: 1,
matchCase: 0,
matchSubset: 1,
autoFill: false,
maxItemsToShow: 10,
cacheLength: 10
}
);
});
</script>然后,我删除了问题中前面代码中的autocomplete.result和.change事件。
效果很好。
https://stackoverflow.com/questions/1489864
复制相似问题