10

我正在使用 Select2 在我的应用程序中创建一个 Gmail 样式的电子邮件地址字段。它工作得很好,除了一种情况:当用户输入一个电子邮件地址并且没有在它之后放置空格或逗号,并且没有按 Enter 或 Tab 键时。例如,如果他们只是键入一个电子邮件地址,然后使用鼠标选择表单中的下一个字段,他们键入的电子邮件地址就会消失。

我在这里有一个示例 jsfiddle说明问题。

这是我在隐藏输入上设置 select2 的方式:

$(function(){
    $('input').select2({
        tags: [],
        width: "300px",
        dropdownCss: {display: 'none'},
        tokenSeparators: [',', ', ', ' ']
    });
});

有没有办法让我设置 select2 以便 onBlur 它只需要剩下的并且当前不是标签并使其成为一个标签吗?

4

4 回答 4

19

现在在 select2 库的 3.3 版中使用“selectOnBlur”选项支持此功能。

于 2013-02-08T16:22:36.833 回答
3

我有一个带有 select2(标签模式)和一个提交按钮的表单。默认情况下,当用户键入标签时,如果没有从下拉菜单中选择标签或按下触发控制键之一,用户输入将丢失,因为插件会在 blur 事件上关闭生成的输入 dom 对象。

我对这个问题的快速解决方法是破解插件模糊功能并添加以下行:

var val=this.search.val();
if($.trim(val)!='') this.onSelect({id:val,text:val});

一旦调用了模糊函数,上面的代码就会检查用户是否进入。如果有任何它触发选择事件并发送所需的对象。我传递的对象仅适用于标记模式下的 select2,如果您使用 select2 v3.2,则可以在第 1311 行的 AbstractSelect2 的模糊功能开始处插入此行。我希望这能让您了解如何自定义小部件根据您的需要。

于 2012-12-19T03:09:55.717 回答
3

从4.0.3开始的文档中:

$('select').select2({
  selectOnClose: true
});

如果用户点击其他地方,这将捕获选择并创建一个标签。

于 2017-07-22T02:46:40.217 回答
1

我真的不明白您在这里要做什么,因为您在谈论电子邮件:

jQuery(element.val().split(",")).each(function () {
                data.push({id: this, text: this});
            });

但你可以试试这个:

var splitted = element.val().split(",");
for(var i=0,z=splitted.length;i<z;i++)
    data.push({id: splitted[i], text: splitted[i]});

顺便说一句,你的 jsfiddle 是不完整的。

于 2012-12-11T12:57:27.083 回答