背景信息:
首先,我创建一个输入文本字段,一个“添加”按钮和一个带有虚拟数据的select2菜单。当用户在输入文本字段中键入内容并单击“添加”时,此项目将添加到select2数据中。
为此,我不得不销毁select2菜单,然后使用添加的数据重新创建它。我还没有找到一种方法来向数据添加对象并刷新select2菜单,并且基于研究,这是一种常见的方法...
function addToSel2(text){
console.log(text);
$("#selectbox").select2("destroy");
startdata.push({id:text,text:text});
createSel2(startdata);
}
在select2-opening事件中,我阻止默认操作(即打开),以便用户无法打开select2菜单(因为他们没有输入任何数据)。
$("#selectbox").select2({
data: {id: 0,text: 'name'},
placeholder: "add an item!",
}).on('select2-opening', function(e){
e.preventDefault();
});
问题:
一旦用户将第一个(以及后一个)值添加到select2菜单,占位符就会改变,所以我知道已经创建了一个新的select2菜单,但是用户仍然无法打开菜单。好像preventDefault仍在影响新的select2菜单....
尝试解决方案
我在初始select2菜单事件上尝试了“return false”,然后在包含数据的select2菜单上“return true”,并且发现了类似的结果。
这是一个代表我的问题的jsfiddle。 http://jsfiddle.net/z6n5C/
答案 0 :(得分:0)
使用.off()
取消绑定事件:
if(data.length > 0)
{
$("#selectbox").select2({
data: data,
placeholder: "Select item...",
allowClear: true
}).off('select2-opening');
}