Select2 / Set search to value
by Bruno G.
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.css">
<select id="e1" style="width:300px;">
<option value="AB1">ABB 1</option>
<option value="AC1">ACC 1</option>
<option value="AD1">ADD 1</option>
<option value="A4">AAA 4</option>
<option value="B1">BBB 1</option>
<option value="B2">BBB 2</option>
<option value="B3">BBB 3</option>
<option value="B4">BBB 4</option>
</select>
JavaScript
/**@license
* Custom jQuery position event for textarea and input elements (version 0.1.0)
* Copyright (c) 2019 Jakub T. Jankiewicz <https://jcubic.pl/me>
* Released under the MIT license
* https://github.com/jcubic/jquery-position-event
*/
!function(t,i){var n="undefined"!=typeof window?window:global;"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&module.exports?module.exports=function(n,e){return e===i&&(e=window!==i?require("jquery"):require("jquery")(n)),t(e),e}:t(n.jQuery)}(function(u,n){var t="cursor_position_"+Math.floor(1e4*Math.random()),e=["keyup","focus","click"].map(function(n){return n+"."+t}).join(" ");var s=/(?:^|\n)([^\n]*)$/;u.fn.on_cursor_position=function(n,t){return"unbind"===n?this.each(function(){var n,e=u(this);e.is("textarea,input")&&(n=e.data("position_callbacks"),t&&n?(n.remove(t),n.has()||(n=null)):n=null,n||e.removeData("callbacks"))}):"bind"===n||"function"==typeof n?(t=t||n,this.each(function(){var r,a,c=u(this);c.is("textarea,input")&&((a=c.data("position_callbacks"))?a.add(t):((a=u.Callbacks()).add(t),c.on(e,function(n){var e,t,i,o,o=(i=u(e=c).get(0),o=0,"selectionStart"in i?o=i.selectionStart:"selection"in document&&(i.focus(),t=document.selection.createRange(),e=document.selection.createRange().text.length,t.moveStart("character",-i.value.length),o=t.text.length-e),o);o!==r&&(r=o,o=c[0].value.substring(0,r),o={position:r,column:o.match(s)[1].length,line:o.split("\n").length-1},a.fireWith(c[0],[o]))})))})):void 0},u.event.special.position={add:function(n){u(this).on_cursor_position(n.handler)},trigger:function(n,e){return u(this).trigger("click."+t),!1},remove:function(n){u(this).on_cursor_position("unbind",n.handler)}}});
const s2 = $("#e1")
s2.val("AB1")
.select2({
tags: true,
matcher: function (params, data) {
console.log('matcher', new Date().toTimeString());
// If there are no search terms, return all of the data
if (params.term === undefined || params.term.trim()...