我怎样才能让 typeahead.js 与 jquery.validate 一起玩得很好?

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 验证属性的副本。

我该如何解决这个问题?

Gar*_*ill 6

这似乎有效(在调用后立即放置typeahead()

$("input.tt-hint").removeAttr("data-val data-val-required data-val-maxlength data-val-maxlength-max");
Run Code Online (Sandbox Code Playgroud)