Выбрать2 автозаполнение по значению опции
Я попытался добавить тег / автозаполнение для своего сайта. Его работа через текст опции. Я почти близок к результату, но все еще зависаю.
Теперь, когда вы попытаетесь выбрать опционный текст, появится связанный текст. Но теперь я хочу, чтобы появилось катманду или связанный текст поиска опции также через значение опции.
Пример: когда мы будем искать значение a001, появится kathmandu и выберем такое же, как a002, появится pokhara
$("select").select2({
tags: "true",
placeholder: "Select an option",
allowClear: true,
width: '100%',
createTag: function (params) {
var term = $.trim(params.term);
if (term === '') {
return null;
}
return {
id: term,
text: term,
value: true // add additional parameters
}
}
});
.select2-container {
max-width: 400px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet"/>
<select class="custom-select" multiple="multiple">
<option value="a001">Kathmandu</option>
<option value="a002">Pokhara</option>
<option value="a003">Lalitpur</option>
</select>
Я думаю, что я близок после поиска по значению и нажмите на него, он покажет соответствующую опцию с идентификатором. Но я хочу только вариант текста, как Pokhara Катманду, а не ID в выбранной области.
2 ответа
Чтобы удалить дубликаты Id
и Text
показывает при вводе только Id
проверить, соответствует ли введенный термин существующему Id
и если он просто возвращает Text
из соответствующего варианта:
options = [];
// create an array of select options for a lookup
$('.custom-select option').each(function(idx) {
options.push({id: $(this).val(), text: $(this).text()});
});
$("select").select2({
tags: "true",
placeholder: "Select an option",
allowClear: true,
width: '100%',
createTag: function (params) {
var term = $.trim(params.term);
if (term === '') {
return null;
}
// check whether the term matches an id
var search = $.grep(options, function( n, i ) {
return ( n.id === term || n.text === term); // check against id and text
});
// if a match is found replace the term with the options' text
if (search.length)
term = search[0].text;
else
return null; // didn't match id or text value so don't add it to selection
return {
id: term,
text: term,
value: true // add additional parameters
}
}
});
$('select').on('select2:select', function (evt) {
//console.log(evt);
//return false;
});
.select2-container {
max-width: 400px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet"/>
<select class="custom-select" multiple="multiple">
<option value="a001">Kathmandu</option>
<option value="a002">Pokhara</option>
<option value="a003">Lalitpur</option>
</select>
Если вы ищете a001
затем выводит идентификатор и текст, оба в выводе. Узнайте, заполнитель.
Если значение является объектом, объект должен быть совместим с внутренними объектами Select2. Идентификатор должен быть идентификатором, который нужно искать при определении, должен ли отображаться заполнитель. Текст должен быть заполнителем для отображения при выборе этой опции.
Пример: поиск a001
после ввода введите катманду и a001 в текстовое поле
с помощью placeholder
в select2
placeholder: {
id: "-1",
text: "Select an option",
}
$("select").select2({
tags: "true",
placeholder: {
id: "-1",
text: "Select an option",
},
allowClear: true,
width: '100%',
createTag: function(params) {
var term = $.trim(params.term);
if (term === '') {
return null;
}
return {
id: term,
text: term,
value: true // add additional parameters
}
}
});
.select2-container {
max-width: 400px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
<select class="custom-select" multiple="multiple">
<option value="a001">Kathmandu</option>
<option value="a002">Pokhara</option>
<option value="a003">Lalitpur</option>
</select>