Jquery Select2中的标记分隔符

Jquery Select2中的标记分隔符,jquery,jquery-select2,Jquery,Jquery Select2,提前感谢,有两件事: 1-如何在Select2中将Enter键和Tab键作为令牌 这是我的一些代码 $("#ListaValores").val($("#ListaValores").val().replace(/\;/g,',')) $("#ListaValores").select2({ tags: true, tokenSeparators: [';'], maximumResu

提前感谢,有两件事:

1-如何在Select2中将Enter键和Tab键作为令牌

这是我的一些代码

            $("#ListaValores").val($("#ListaValores").val().replace(/\;/g,','))
        $("#ListaValores").select2({
            tags: true,
            tokenSeparators: [';'],
            maximumResultsForSearch: -1,
            dropdownCss: {display:'none'},
        });
第一行只是转换输入,以便Select2可以使用数据

原始输入可以是这样的:

$("#ListaValores").val("value1;value2;value3")
这些值存储在db中,并加载到文本框中,然后转换为select2

一切正常,但我想改变这一部分:

tokenSeparators: [';']
因此,它也接受Enter和Tab键作为令牌

有人能帮忙吗?我试过ASCII码,但没有成功

另外,是否有任何标记可以禁用微调器图像? 由于没有数据被加载,我不需要加载图像

更新2:

我在这方面取得了一些成功:

$("#s2id_ListaValores").on('keyup', function(e) {
            if(e.keyCode === 13){
                $("#ListaValores").val($("#ListaValores").val() + ';' + $("#s2id_autogen1").val())
            }
        });

但是$s2id_autogen1.val不是静态的,总是在变化的,所以这种方式只工作一次。。。另外,我还需要更新显示的结果。我可以通过刷新select2 div来完成此操作,但该div会更改其id和$s2id\u ListaValores。在“keyup”上,functione事件将不起作用。

尝试使用以下作为enter键和tab键的标记分隔符

tokenSeparators: [';', '\n', '\t']
输入键通常会通过Select2触发选择,但不同程序中的换行输入键不会触发选择。您可以使用\n指示Select2这些也应被视为分隔符

tab键也会出现相同的情况,通常应选择当前突出显示的值,并在从其他源加载时使用\t作为分隔符


请记住,只有在粘贴需要标记化的数据时,这种差异才真正重要,因为Select2对这两个键具有绑定,将自动标记它们。不过,您可能需要启用标记才能实现这一点。

我通过递归函数解决了这个问题:

//init select2 field:
initMultiSelect(tSel);

function initMultiSelect(tSel) {
        tSel.select2('destroy');
        tSel.select2({
            tags: true,
            tokenSeparators: [',', ' ', ';'],
            dropdownCss: {display:'none'}
        });

        //manual add new values by Enter
        (function (t) {
            $('#s2id_' + t.attr('id')).on('keyup', function(e) {
                if(e.keyCode === 13){
                    //add new value
                    t.val(t.val() + ',' + $('#s2id_' + t.attr('id') + ' input ').val());

                    //refresh select2
                    initMultiSelect(t);

                    //get focus to select2 last position
                    t.select2("close");
                    t.select2("open");
                }
            });
        })(tSel);
    }

当前,粘贴时,在当前版本的select2中,这是不可能的,因为它使用输入类型=text作为输入字段,并且浏览器在粘贴时会删除换行符


为了实现这一点,select2需要打补丁以使用文本区域。我打开了一个Pull请求来实现这一点,您可以在这里查看:如果/当我的Pull请求被合并时,您应该能够使用指定的字符作为标记分隔符,但在这之前,如果愿意,您可以下载my fork来解决您的问题。

如果您设置了多个and标记以允许使用某些值,则Enter is将自动用作令牌分隔符:。github的select2 repo上有一个用于添加此功能的选项:到目前为止,您还不能。正如我前面所说,我已设法解决了此问题。在我留下的代码中,您只需要包含一个正则表达式,它就可以自动处理id更改。欢迎使用Stack Overflow!虽然这段代码片段可能会解决这个问题,包括如何以及为什么解决这个问题的解释,以提高您的文章的质量。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请你的答案加上解释,并指出哪些限制和假设适用。这个答案使用了与我在原始帖子中更新的想法相同的想法。除了使用正则表达式之外,还有一种替代方法。\n-可以,但是我在Ubuntu上测试,Windows呢?