1

我这里有这个 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());
        },
    });
}
                     });​&lt;/script>
4

1 回答 1

1

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

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

$("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/

于 2012-09-24T01:10:23.123 回答