Gar*_*ill 2 javascript jquery jquery-validate typeahead.js
我有一个使用 jQuery 验证的 ASP.NET MVC 5 网站(jquery.validate.js在 MVC 项目模板中)。我正在尝试使用typeahead.js在表单中的输入字段之一上实现预输入功能。(该表单恰好在引导模式内)。
因为提交表单会发出 AJAX 请求,所以表单提交事件被困如下:
$form.on("submit", function (e) {
if (!$form.valid()) {
return false;
}
... do stuff ...
Run Code Online (Sandbox Code Playgroud)
请注意,此处发生的第一件事是检查表单是否存在任何验证错误,如 jQuery 验证库检测到的那样。
如果我不使用typeahead,那么一切都很好。我可以在表单中输入值并提交,一切都很好。
但是,只要我执行以下操作将预输入功能添加到我的输入中:
$("#myInput").typeahead({
minLength: 1,
highlight: true
},
{
source: mySource
});
Run Code Online (Sandbox Code Playgroud)
...然后我不能再提交表格了。我的形式被认为是不合法的:$form.valid()回报false。
我认为typeahead.js图书馆正在向表单添加一些额外的元素(包括隐藏的输入),这让jquery.validate.js图书馆感到困惑。
使用 Chrome F12,似乎那里有一个输入看起来像原始输入的副本,遗憾的是该副本似乎已被复制,因此它也具有所有 jQuery 验证属性的副本。
我该如何解决这个问题?
这似乎有效(在调用后立即放置typeahead():
$("input.tt-hint").removeAttr("data-val data-val-required data-val-maxlength data-val-maxlength-max");
Run Code Online (Sandbox Code Playgroud)