Пример того, как отключить элемент выбора, можно найти здесь: http://jqueryui.com/autocomplete/#categories
Этот пример немного сложен, так как мы получаем доступ к виджету меню внутри виджета автозаполнения.Для вашего кода можно использовать аналогичный метод:
$("#sl").autocomplete("widget").menu("option", "items", "> li:not('.no-select')");
widget ()
Возвращает объект jQuery, содержащий элемент меню.Хотя пункты меню постоянно создаются и уничтожаются, сам элемент меню создается во время инициализации и постоянно используется.
Это адрес пункта № 1.
Для адреса пункта № 2,Вы должны рассмотреть логику принятия выбора, если пользователь не сделал выбор.Например, если пользователь набрал l
и получил 10 результатов или даже только 2 результата ... что вы выбираете для пользователя?Также, если пользователь отошел от поля, автоселект закроет его меню и уничтожит результаты.
На мой взгляд, было бы лучше изучить скрытые поля, если они пусты, запретить формуот того, чтобы быть представленным и заставить пользователя выбрать параметр, сделайте его обязательным для заполнения.
$(function() {
var countries = [{
country: 1,
countryname: "UK",
label: "London",
value: 1
}, {
country: 1,
countryname: "UK",
label: "Manchester",
value: 2
}];
$('#sl').autocomplete({
source: countries,
select: function(event, ui) {
event.preventDefault();
if (ui.item.label === "No results found") {
$("#sl").val("");
return false;
}
$("#country").val(ui.item.country); // save selected id to hidden input
$("#city").val(ui.item.value); // save selected id to hidden input
$('#sl').val(ui.item.label + ', ' + ui.item.countryname)
},
focus: function(event, ui) {
event.preventDefault();
$('#sl').val(ui.item.label);
},
response: function(event, ui) {
if (!ui.content.length) {
var noResult = {
value: "",
label: 'No results found'
};
ui.content.push(noResult);
}
}
});
$("#sl").autocomplete("widget").menu("option", "items", "> li:not('.no-select')");
$("#sl").autocomplete("instance")._renderItem = function(ul, item) {
var li = $("<li>");
if (item.country == undefined) {
li.addClass("no-select").append(item.label);
} else {
li.append("<div><strong>" + item.label + "</strong>, " + item.countryname + "</div>");
}
return li.appendTo(ul);
}
$("form").submit(function(e) {
e.preventDefault();
console.log($(this).serialize());
if ($("#country").val() == "" || $("#city").val() == "") {
$("#sl").focus();
return false;
}
return true;
});
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="search-homepage-input">
<form>
<div class="col-md-9">
<input type="text" name="sl" class="form-control shop-input" max-length="50" placeholder="Eg. England, London, Manchester" id="sl" /> <span style="color: red; font-size: 65%;">* Required</span>
<input type="text" name="country" id="country" style="display: none;" />
<input type="text" name="city" id="city" style="display: none;" />
</div>
<div class="col-md-3">
<button type="submit" class="btn btn-homepage">Find Teams</button>
</div>
</form>
</div>
Надеюсь, это поможет.