jquery autoselect查找名称是否存在

时间:2012-05-20 04:37:41

标签: jquery jquery-ui autocomplete

我正在尝试使用autoselect在我的数据库中查找一些客户端。目标是确定客户端是否存在,如果它不运行功能。现在我的函数将确定第一个LI是否与输入的值匹配。如果没有,那么它将清除结果并说客户端不存在。

目前我的代码只查看第一个返回的LI,如果它与第一个LI不匹配,则它不认为客户端存在。

这会导致许多问题...如果用户决定点击自动填充中列出的第二项,我的代码将删除它并说客户端不存在。

另外,我有一个函数可以检查用户何时点击ENTER或TAB ...我的目标是选择第一个列表项,如果他们这样做,就把它作为值。

我尝试了很多不同的东西......包括:包含......等等。我想在这一点上我只需要另一双眼睛。

$("#client").autocomplete({
        source: "autoComplete/clientAutoComplete.php",
        minLength: 2,
        change: function (event, ui) {
                //if the value of the textbox does not match a suggestion, clear its value
                if ($(".ui-autocomplete li:first").text() != $(this).val()) {
                        $(this).val('');
                        clientDoesNotExist();
                }
        }
}).on('keydown', function (e) {
        var keyCode = e.keyCode || e.which;
        if ((keyCode == 9 || keyCode == 13) && ($(".ui-autocomplete li:first").text() == $(this).val())) {
                $(this).val($(".ui-autocomplete li:visible:first").text());
        }
});

在我将“mit”键入“#client”输入字段后,有关生成的HTML(由jQuery生成)的示例:

<ul class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all" role="listbox" aria-activedescendant="ui-active-menuitem" style="z-index: 1; top: 202.983px; left: 337.15px; display: block; width: 406px;">
<li class="ui-menu-item" role="menuitem">
<a class="ui-corner-all" tabindex="-1">mitch</a>
</li>
<li class="ui-menu-item" role="menuitem">
<a class="ui-corner-all" tabindex="-1">mitch2</a>
</li>
<li class="ui-menu-item" role="menuitem">
<a class="ui-corner-all" tabindex="-1">Mitchell56474</a>
</li>
</ul>

为了帮助解释一下,此时如果我选择“mitch2”(因为它是第二个LI),我当前的代码将运行clientDoesNotExist();功能。我想我可能需要检查所有LI以确定返回的结果中是否存在完全匹配。

1 个答案:

答案 0 :(得分:1)

我认为您想要过滤掉文本相同的li,然后抓住第一个......

$(".ui-autocomplete li a").filter(
    function() {
        return $(this).text() == "mitch2";
    }).first()

您还会注意到我已将$(this).val()更改为静态文本"mitch2" ..过滤器调用中的函数会更改上下文,因此您需要保存{ {1}}变量中的值并使用它代替$(this).val()

更新评论: *我在帖子中省略了我在测试中使用的锚标记。从我的测试来看,这似乎是必要的。