我的元素是一个jQuery自动完成元素,它从URL获取其选项:
$element.autocomplete({
source: '/mysearchurl',
open: function () {
//...
},
response: function (event, ui) {
//...
},
select: function (event, ui) {
//...
}
});
按预期工作:用户输入一些字符,并在下拉列表中显示匹配值。
我现在想要的是,在我的Javascript中,是从列表中获取选项,理想情况下是从URL获取的相同JSON。我可以尝试通过以下方式从元素中收集它们:
$($element.data('ui-autocomplete').menu.element[0].list.childNodes).each()
但也许有更好的方法?
答案 0 :(得分:1)
我建议使用source函数和Ajax调用:
$("#autocomplete").autocomplete({
source: function(request, response) {
var el = this.element;
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
$.ajax({
url: "https://api.myjson.com/bins/qnhcd",
type: "GET",
contentType: "application/json",
dataType: "json",
success: function(data, textStatus, jqXHR) {
var selection = data.filter(function(item) {
if (matcher.test(item.value)) return item.value;
});
el.data("source", selection);
response(selection);
}
});
}
});
$( "#autocomplete" ).on( "autocompleteresponse", function( event, ui ) {
refreshList();
});
refreshList = function() {
var source = $("#autocomplete").data("source");
console.log("refreshList", source);
$("#list").empty();
if (source) {
for (var i in source) {
$("#list").append("<li>" + source[i].value + "</li>")
}
} else {
$("#list").append("<li>No options</li>")
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<label for="autocomplete">Select a programming language: </label>
<input id="autocomplete">
<br>
<button onclick="refreshList()">
refresh list
</button>
<br>
<ol id="list">
</ol>
这是一个jsfiddle:http://jsfiddle.net/beaver71/svLsw13f/