Javascript Selectize.js:在静默添加项目时触发OneMaded事件
使用Selectize.js,我试图在不触发Javascript Selectize.js:在静默添加项目时触发OneMaded事件,javascript,jquery,selectize.js,Javascript,Jquery,Selectize.js,使用Selectize.js,我试图在不触发onimadd事件的情况下初始化动态预选列表中的一项。在以下代码中,即使silent参数为truthy,也会触发事件: $(function () { $('select').selectize({ onItemAdd: function () { alert("Add item"); } }); // this triggers an the event $('s
onimadd
事件的情况下初始化动态预选列表中的一项。在以下代码中,即使silent
参数为truthy,也会触发事件:
$(function () {
$('select').selectize({
onItemAdd: function () {
alert("Add item");
}
});
// this triggers an the event
$('select')[0].selectize.addItem('2', true);
});
JSFiddle:
根据文件:
:“选择”一项。将其添加到列表中当前插入符号位置。如果“静默”是真实的,则不会对原始输入触发任何更改事件附加项(值,无提示)
知道如何避免触发
onimadded
事件吗?silent
参数是否被标记,或者我是否应该使用change
事件?addItem(value,silent)中的silent参数仅影响change
事件是否发生。您无法使用silent=true来避免item\u add
事件
一个对我有效的快速修复方法是保留一个状态标志并在事件处理程序中引用它
$(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;
});
唯一对我有效的方法是在本地存储
item\u add
事件,将其从selectize实例中删除,并在添加项目后将其设置回原来的位置:
onItemAdd: function(val) {
var e = this._events['item_add'];
delete this._events['item_add'];
this.addItem(123);
this._events['item_add'] = e;
}
注意:我可以使用
off(…)
和on(…)
函数来禁用处理程序,添加项目,然后重新启用处理程序,但这看起来不像应该执行的方式=/What do you run.off()和.on()?最初的select?我很确定它是的.on()
和.off()
事件方法,因此,除了在手动添加项之前使用关闭(…)
和在手动添加项之后使用打开(…)
之外,没有办法避免触发项添加
事件?事实并非如此,无论如何都会触发change
事件。初始问题中链接的JSFIDLE已经更新以显示这一点。这是0.12.0版本中的一个bug。在0.12.1版本中尝试此示例。@实际上,我在0.12.6和0.12.4中仍然看到此问题。即使我的理解是,当“静默”时,setValue()不应该被激活。我通过将我的事件绑定从“onimadd:selectionChange(…)”更改为“onChange:selectionChange(…)”解决了我的问题。是的,这是一个“可接受”的解决方案,尽管它有点粗糙…:-P