我正在使用 Select2 在我的应用程序中创建一个 Gmail 样式的电子邮件地址字段。除了一种情况外,它工作得很好:当用户键入电子邮件地址并且没有在其后放置空格或逗号,并且不按 Enter 或 Tab 键时。例如,如果他们只键入电子邮件地址,然后使用鼠标选择表单中的下一个字段,则他们键入的电子邮件地址将消失。
我这里有一个示例 jsfiddle 来说明这个问题。
以下是我在隐藏输入上设置 select2 的方式:
$(function(){
$('input').select2({
tags: [],
width: "300px",
dropdownCss: {display: 'none'},
tokenSeparators: [',', ', ', ' ']
});
});
有没有办法让我设置 select2,以便 onBlur 它只接受剩下的任何内容,而不是当前不是标签并使其成为一个标签?
在select2库的3.3版本中,使用"selectOnBlur"选项支持此功能。
从 4.0.3 开始的文档:
$('select').select2({
selectOnClose: true
});
这将捕获所选内容,并在用户单击其他位置时创建标记。
我有一个带有select2(标签模式)和一个提交按钮的表单。默认情况下,当用户键入标签时,如果不从下拉列表中选择标签或按触发控制键之一,用户输入将丢失,因为插件会在模糊事件上关闭生成的输入 dom 对象。
我对这个问题的快速解决方法是破解插件模糊功能并添加以下行:
var val=this.search.val();
if($.trim(val)!='') this.onSelect({id:val,text:val});
调用模糊函数后,上面的代码会检查用户是否输入。如果有,它会触发选择事件并发送所需的对象。我传递的对象仅适用于标记模式下的 select2,如果您使用 select2 v3.2,则可以在第 1311 行的 AbstractSelect2 模糊功能的开头插入此行。我希望这能让您了解如何根据需要自定义小部件。
我真的不明白你在这里想做什么,因为你在谈论电子邮件:
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不完整。