Question

I want add some items to a selectized input after user clicks on a button. The input data are loaded via Ajax. When I call addItem(value) no thing happens. But if I try to type some string in the input it loads data and after this addItem(value) will works.

https://github.com/brianreavis/selectize.js/blob/master/docs/api.md

Was it helpful?

Solution

This plugin does not attempt to load an item metadata from the server. You need to first add an option using addOption() method. Next, you can use addItem().

v.selectize.addOption({value:13,text:'foo'}); //option can be created manually or loaded using Ajax
v.selectize.addItem(13); 

OTHER TIPS

You can add options like this:

var $select = $(document.getElementById('mySelect')).selectize(options);
var selectize = $select[0].selectize;
selectize.addOption({value: 1, text: 'whatever'});
selectize.refreshOptions();

This only adds the option as possible selection. Now you can use addItem to add the new option to the list:

selectize.addItem(1);

This does not need a refresh function. You do not need to use "refreshOptions" if you add the new option immediately.

Try this.

 $('.select-ajax-city').each(function() {
    if (this.selectize) {
        for(x=0; x < 10; ++x){
            this.selectize.addOption({value:x, text: x});
        }
    }
});  

Try This

var $select = $(document.getElementById('Your-element-id'));
var selectize = $select[0].selectize;
selectize.addOption({value: '2', text: 'test'});
selectize.addItem('2');

If you want to be more flexible then you can use the length like this.

var $select = $(document.getElementById('Your-ID'));        
var selectize = $select[0].selectize;
var count = selectize.items.length + 1;
selectize.addOption({ value: count, text: 'value-here' });
selectize.addItem(count);
$('#id').selectize({
   create: function(input,callback){
      $.ajax({
           url: "",
           type: "POST",
           data: {value : input},
              success: function(res) {
                   callback({value: res, text: input});
              }
      });
   }
});

For adding new options dynamically is neccesary to call clearOptions for clean the options, adding the new list options using addOption and call refreshState function after all.

    var listItems = [{id: 1, value: 'Element1'},{id: 2, value: 'Element2'}]
    /* Initialize select*/
    var $select = $('#element').selectize();
    var control = $select[0].selectize;
    control.clear()
    control.clearOptions();

    /* Fill options and item list*/
    var optionsList = [];
    var itemsList = [];
    $.each(listItems, function() {
      optionsList.push( {
                      value: this.id,
                       text: this.value
              });
       itemsList.push({
                     value: this.id,
                      text: this.value
                  });
     });
      
     /* Add options and item and then refresh state*/                    
    control.addOption(optionsList)
    control.addItems(itemsList);
    control.refreshState();

    /* Add element 1 selected*/
    $.each(result, function() {
        if (this.id == 1) {
        control.addItem(this.Tax.id,this.Tax.title);
         }
           
    });

This is another way you can add items manually if you have set other values to your select:

$('select').selectize({
    create: true,
    sortField: "text",
    hideSelected: false,
    closeAfterSelect: false,
    options:[
       {
         text:'<text goes here>',
         value:'<value goes here>',                  
      }
    ]
});
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top