从select2-opening事件中清除preventDefault()

时间:2013-12-06 17:07:47

标签: javascript jquery jquery-select2

背景信息:

首先,我创建一个输入文本字段,一个“添加”按钮和一个带有虚拟数据的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/

1 个答案:

答案 0 :(得分:0)

使用.off()取消绑定事件:

DEMO

if(data.length > 0)
    {
        $("#selectbox").select2({
            data: data,
            placeholder: "Select item...",
            allowClear: true
        }).off('select2-opening');
    }