2015-03-12 1 views
8

Использование Selectize.js. Я пытаюсь инициализировать динамический предварительный выбор одного из элементов списка без запуска события onItemAdd. В следующем коде, это событие срабатывает, даже если параметр silent является truthy:Selectize.js: onItemAdd событие, вызванное при бесшумном добавлении элемента

$(function() { 
    $('select').selectize({ 
     onItemAdd: function() { 
      alert("Add item"); 
     } 
    }); 
    // this triggers an the event 
    $('select')[0].selectize.addItem('2', true); 
}); 

JSFiddle: http://jsfiddle.net/zuzat0dc/1/

Согласно документации:

  • addItem(value, silent): "Выбор режима" элемент. Добавляет его в список в текущей позиции каретки. Если «тихий» является правдивым, на исходном входе не будет произведено никаких изменений.

Любая идея, как избежать инициирования события onItemAdd? Является ли параметр silent b0rked или я должен использовать событие change вместо этого?

+1

Примечание: Я мог бы использовать функции 'off (...)' и 'on (...)' для отключения обработчика, добавить элемент затем повторно активируется обработчиком, но это не похоже на то, как это должно быть сделано =/ –

+0

Что вы запускаете .выключить и включить()? Оригинальный выбор? – temuri

+0

Я уверен, что это были методы событий .on() и '.off()' для [selectize instance] (https://github.com/selectize/selectize.js/blob/master/docs /api.md#methods_events) –

ответ

1

Бесшумный параметр в addItem(value, silent) влияет только на факт, имеет ли событие change событие. Вы не можете избежать события item_add с silent = true.

+0

Итак, нет способа избежать запуска события 'item_add', кроме использования' off (...) 'before и' on (...) 'после добавления вручную пункт? –

+0

На самом деле это неверно, событие «change» уволено в любом случае. JSFiddle, связанный в первоначальном вопросе, был обновлен, чтобы показать это. –

+3

Это ошибка в версии 0.12.0. Попробуйте этот образец http://jsfiddle.net/6zyums3d/1/ с версией 0.12.1. – alemv

6

Быстрое исправление, работал для меня было сохранить государственный флаг и ссылаться на него в обработчик событий ...

$(function() { 

    var initialising = true; 

    $('select').selectize({ 
    onItemAdd: function() { 
     if(!initialising) { 
     alert("Add item"); 
     } 
    } 
    }); 

    // this triggers an the event 
    $('select')[0].selectize.addItem('2', true); 

    initialising = false; 
}); 
+0

Да, это «приемлемое» решение, хотя оно вроде _hacky _... :-p –

0

Единственное, что работал для меня было хранить item_add событие локально, удалить он из selectize экземпляра и установить его после того, как я добавил элемент:

onItemAdd: function(val) { 
    var e = this._events['item_add']; 
    delete this._events['item_add']; 
    this.addItem(123); 
    this._events['item_add'] = e; 
}