Selectize.js:静默添加项目时触发的onItemAdd事件

问题描述 投票:9回答:3

使用Selectize.js,我正在尝试初始化动态预先选择列表中的一个项而不触发onItemAdd事件。在以下代码中,即使silent参数是真实的,也会触发事件:

$(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事件?

javascript jquery selectize.js
3个回答
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;
});

2
投票

addItem(value, silent)中的无声参数仅影响change事件的事实。你无法用item_add避免silent = true事件。


1
投票

对我来说唯一有用的是在本地存储item_add事件,将其从选择实例中删除并在添加项目后将其设置为:

onItemAdd: function(val) {
  var e = this._events['item_add'];
  delete this._events['item_add'];
  this.addItem(123);
  this._events['item_add'] = e;
}
© www.soinside.com 2019 - 2024. All rights reserved.