【问题标题】:Jquery autocomplete no result append as dropdown child issueJquery自动完成没有结果追加为下拉子问题
【发布时间】:2014-04-11 11:08:49
【问题描述】:

我有一个用 ASP.Net MVC3 制作的网站 (cpusort.com),用户可以使用 jquery ui 自动完成搜索并从找到的结果中进行选择。

我正在使用这个脚本来获取结果

        $(function () {
            function log(message) {
            }
            $("#cpu").autocomplete({
                source: "/Search/",
                minLength: 1,
                response: function (event, ui) {
                    if (ui.content.length === 0) {
                        alert("No Result Found");
//.append("<a href='/AdvancedSearch/[search_term]'>More results for [search_term]</a>")
                    }
                },
                open: function (event, ui) {
                    var url = "<a href='/AdvancedSearch/[search_term]'>More results for [search_term]</a>";
                    $("ul.ui-autocomplete.ui-menu").append(url);
                },
                select: function (event, ui) {
                    $("#cpu").val(ui.item.title);
                    $("#cpu-query").val(ui.item.query);
                    $("#cpu-clockspeed").val(ui.item.clockspeed);
                    $("#cpu-cores").val(ui.item.cores);
                    $("#cpu-image").val(ui.item.cpuimage);
                    return false;
                }
            })
    .data("ui-autocomplete")._renderItem = function (ul, item) {
        return $("<li>")
        .append("<a href='/Cpu/" + item.query + "'><div style='width:100%'><span class='titlesearch' >" + item.title + "</span></div><div <div style='width:100%'><span class='titlesmallspan'>" + item.clockspeed + " GHz | " + item.cores + "</span></div></a>")
        .appendTo(ul);
    };
        });

但是如果没有找到结果,我该如何显示,在这种情况下我使用警报,我如何在单个子项中附加文本“提前搜索”

.append("<a href='/AdvancedSearch/[search_term]'>More results for [search_term]</a>")

请帮忙解决一下,谢谢

【问题讨论】:

    标签: javascript jquery-ui asp.net-mvc-3 jquery-ui-autocomplete


    【解决方案1】:

    我建议你使用 jQuery 自动完成的open 事件

    open: function (event, ui) {
          search_term = event.target.value;
          var d = $('.ui-autocomplete').append("<a href='/AdvancedSearch/[" + search_term + "]'>More results for [" + search_term + "]</a>")
    

    }

    这会将您需要的 html 元素附加到自动完成中列出的选项的末尾。

    JSFiddle#1

    希望你能理解。


    更新:

    从您的comments 看来,您似乎尝试通过附加这对open 自动完成事件不起作用。

    相反,您应该选择 response 自动完成事件。

    为什么?

    1) 找到匹配时触发open事件,找不到匹配时将不起作用。

    2) 而response 事件在这两种情况下都会触发(这不能用于你的情况#1),但它只对你的情况#2 很有帮助。

    response: function (event, ui) {
                if (ui.content.length === 0) {  //check for none results
                    search_term = event.target.value;
                    $(this).next('a').remove(); //Remove before you add
                    $(this).after("<a href='/AdvancedSearch/[" + search_term + "]'>More results for [" + search_term + "]</a>");
                }
            }
    

    JSFiddle#2

    这是有道理的,我想是的。

    修改代码以重新创建与您的问题相同的内容。

    【讨论】:

    • 感谢您的回复,好的,看起来不错。但是如果我想触发这个选项,它没有找到结果。我尝试使用if (!ui.content.length) { var noResult = "&lt;a href='/search_advance/'&gt;Search In Advance&lt;/a&gt;"; ui.content.push(noResult); }
    • @ArbazAbid 检查我更新的答案(我知道它可能不像 dd 但明智的做法)。
    • @ArbazAbid 很高兴能帮到你:)
    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    相关资源
    最近更新 更多