一些不正常工作的Ajax搜索

时间:2012-09-24 00:29:52

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

我有这个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>

1 个答案:

答案 0 :(得分: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/