我有这个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>
答案 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);
};