【问题标题】:something not working right Ajax search某些东西无法正常工作 Ajax 搜索
【发布时间】:2012-09-24 00:29:51
【问题描述】:

我这里有这个 javascript,它可以像音乐搜索引擎的搜索建议一样工作。我在输入第一个字符时遇到了这个问题,它工作正常,但如果我输入更多字符,它会在一行中显示我的结果,没有图片中断和everithyng。请有人看看并告诉我我做错了什么。这是示例http://jsfiddle.net/coladeu/Qhj5N/24/

<script>var keyword;
    $("input#selectedInput").bind("autocompleteselect", function (event, ui) {        
alert("Sel item " + JSON.stringify(ui.item.json));
}).autocomplete({
appendTo: "#list",
source: function (request, response) {
    keyword= $('#selectedInput').val();
    //alert("success");
    $.ajax({
        url: "http://itunes.apple.com/search?term=" + keyword + "&entity=musicTrack",
        dataType: "jsonp",
        data: {
            featureClass: "P",
            style: "full",
            maxRows: 12,
            name_startsWith: request.term
        },
        success: function (data) {
            response($.map(data.results, function (item) {
                itunesJson = item;
                return {
                    label: "<li><img src='" + item.artworkUrl30 + "' alt='no photo'/>" + item.trackName + "</li>",
                }
            }));
            var elm = $("#list");
            elm.html(elm.text());
        },
    });
}
                     });​</script>

【问题讨论】:

    标签: jquery ajax jquery-ui search jquery-ui-autocomplete


    【解决方案1】:

    这里有一些问题。主要问题是您应该重写_renderItem 函数来自定义列表的显示,如this demo 中所示。

    这意味着您应该执行以下操作,而不是使用 HTML 填充每个项目的 label 属性:

    $("input#selectedInput").bind("autocompleteselect", function(event, ui) {
        alert("Sel item " + JSON.stringify(ui.item));
    }).autocomplete({
        appendTo: "#list",
        source: function(request, response) {
            $.ajax({
                url: "http://itunes.apple.com/search?term=" + request.term + "&entity=musicTrack",
                dataType: "jsonp",
                data: {
                    featureClass: "P",
                    style: "full",
                    maxRows: 12,
                    name_startsWith: request.term
                },
    
                success: function(data) {
                    response($.map(data.results, function(item) {
                        itunesJson = item;
                        return {
                            imgUrl: item.artworkUrl30 ,
                            label: item.trackName
                        }
                    }));
                },
            });
        }
    }).data("autocomplete")._renderItem = function(ul, item) {
        return $("<li />")
            .data("item.autocomplete", item)
            .append("<a><img src='" + item.imgUrl + "' alt='no photo' />" + item.label + "</a>")
            .appendTo(ul);
    };​
    

    示例: http://jsfiddle.net/Qhj5N/26/

    【讨论】:

      猜你喜欢
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多