3

我做了一个 jQuery 自动完成搜索来搜索我的 CI 应用程序中的页面,返回的 JSON 数据包括 2 个元素,页面的“slug”和页面的“名称”,所以我使用“名称”显示在自动完成列表中,当有人选择结果或按回车键时,它会使用 slug 将他重定向到该页面:

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

现在我添加了另一个选项,当有人键入关键字但没有找到结果然后他按回车键时,它应该转到带有 no-results 参数的“页面”。

此代码在除 Firefox 之外的所有浏览器上运行良好,在所有情况下都进入无结果页面。

仅当未找到结果并且用户输入随机页面名称然后按 Enter 时,我才需要它转到无结果页面。

4

1 回答 1

2

我认为这是关于转发问题。当您按下“Enter”按钮时,keypress' 和自动完成选择的功能都会被调用。我们应该插入一个 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 回答