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

有帮助吗?

解决方案

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); 

其他提示

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>',                  
      }
    ]
});
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top