Select2 autocomplete by option value

后端 未结 2 1474
既然无缘
既然无缘 2021-02-14 06:43

I have tried to integrate tag/autocomplete for my site. Its working through option text. I am almost close to result but still hanging.

Now when you try to select option

相关标签:
2条回答
  • 2021-02-14 07:23

    To remove the double-ups of the Id and the Text showing when entering just the Id check whether the entered term matches an existing Id, and if it does simply return the Text of the matching option:

    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>

    0 讨论(0)
  • 2021-02-14 07:23

    if you search a001 then output is display id and text both in output. Learn placeholder.

    If the value is an object, the object should be compatible with Select2's internal objects. The id should be the id to look for when determining if the placeholder should be displayed. The text should be the placeholder to display when that option is selected.

    Example : search a001 after enter display kathmandu and a001 in textbox

    using placeholder in 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>

    0 讨论(0)
提交回复
热议问题