3

CI アプリケーションでページを検索するために jQuery オートコンプリート検索を作成しました。返された JSON データには、ページの「スラッグ」とページの「名前」の 2 つの要素が含まれているため、「名前」を使用してオートコンプリート リストに表示します。誰かが結果を選択するかエンターキーを押すと、スラッグを使用してそのページにリダイレクトされます。

$(function() {
    $( "#search" ).autocomplete({
        source: "index.php/pages/get_pages",
        minLength: 2,
        select: function(event, ui) {
            $(event.target).val(ui.item.value);
            window.location.href = "index.php/pages/" + ui.item.slug;
            return false;
        }
    });

    $("#search").keypress(function(e){
        if (e.which == 13) {
            window.location.href = "index.php/pages/no-results";
            return false;
        }
    });
});

今、誰かがキーワードを入力して結果が見つからなかったときに別のオプションを追加し、Enter キーを押すと、結果のないパラメーターで「ページ」に移動する必要があります。

このコードは、Firefox を除くすべてのブラウザーで正常に機能し、すべての場合で結果のないページに移動します。

結果が見つからず、ユーザーがランダムなページ名を入力してEnterキーを押した場合にのみ、結果のないページに移動する必要があります。

4

1 に答える 1

2

転送の問題だと思います。「Enter」ボタンを押すと、keypress' と autocomplete select の両方の関数が呼び出されます。そのうちの 1 つだけを実行するには、if ロジックを挿入する必要があります。

ちなみに、サーバー側で転送操作を行うのは非常に論理的だと思います。

$(function() {
    var isSelected = false;
    $("#search" ).autocomplete({
        source: "index.php/pages/get_pages",
        minLength: 2,
        select: function(event, ui) {
            isSelected = true;
            $(event.target).val(ui.item.value);
            window.location.href = "index.php/pages/" + ui.item.slug;
            return false;
        }
    });

    $("#search").keypress(function(e){
        if (e.which == 13) {
            if(!isSelected)
            {
                 window.location.href = "index.php/pages/no-results";
            }
            return false;
        }
    });
});
于 2012-11-22T13:14:54.933 に答える