【问题标题】:Clearing preventDefault() from select2-opening event从 select2-opening 事件中清除 preventDefault()
【发布时间】:2013-12-24 03:23:49
【问题描述】:

背景信息:

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

【问题讨论】:

    标签: javascript jquery jquery-select2


    【解决方案1】:

    使用.off()解除绑定事件:

    DEMO

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

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 2020-01-08
      • 1970-01-01
      • 2020-04-07
      • 2018-07-02
      • 1970-01-01
      相关资源
      最近更新 更多