2

自動選択を使用して、DB内のいくつかのクライアントを見つけようとしています。目標は、クライアントが関数を実行していない場合に、クライアントが存在するかどうかを判断することです。今のところ、私の関数は最初のLIが入力された値と一致するかどうかを判断します。そうでない場合は、結果がクリアされ、クライアントが存在しないことが示されます。

現在、私のコードは最初に返されたLIのみを調べ、最初のLIと一致しない場合、クライアントが存在するとは見なしません。

これは多くの問題を引き起こします...ユーザーがオートコンプリートにリストされている2番目の項目をクリックすることを決定した場合、私のコードはそれを消去し、クライアントが存在しないと言います。

また、ユーザーがEnterキーまたはTabキーを押したときにチェックする関数があります...私の目標は、最初のリストアイテムを選択し、これを実行した場合にその値を作成することです。

私はさまざまなことを試しました...:contains...などを含みます。この時点でもう一組の目が必要だと思います。

$("#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());
        }
});

'#client'入力フィールドに「mit」と入力した後に生成された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」を選択した場合(2番目のLIであるため)、現在のコードはclientDoesNotExist()を実行します。働き。返された結果に完全に一致するものが存在するかどうかを判断するには、すべてのLIをチェックする必要があると思います。

4

1 に答える 1

1

テキストが等しいliを除外してから、最初のものを取得したいと思います...

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

$(this).val()を静的テキストに変更したことにも気付くでしょう"mitch2"。フィルター呼び出しの関数はコンテキストを変更するため、$(this).val()値を変数に保存し、それを の代わりに使用する必要があります"mitch2"

コメントの更新: * テストで使用していたアンカー タグを投稿から削除しました。私のテストから、必要なようです。

于 2012-05-20T05:47:15.863 に答える