jquery 标记Select2中的分隔符

xytpbqjk  于 2022-11-22  发布在  jQuery
关注(0)|答案(3)|浏览(229)

提前 感谢 两 件 事 :
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")

格式
这些 值 存储 在 一 个 数据 库 中 , 并 加载 到 一 个 文本 框 中 , 然后 将 该 文本 框 转换 为 一 个 select2 。
一切 都 按 预期 工作 , 但 我 想 转换 此 部分 :

tokenSeparators: [';']

格式
因此 它 也 接受 " Enter " 和 " Tab " 键 作为 标记 。
有人 能 帮忙 吗 ? 我 试 过 ASCII 码 , 但 没有 运气 。
2-另外 , 是否 有 任何 标记 来 禁用 微调 图像 ? ( 因为 没有 数据 被 加载 , 我 真 的 不 需要 一 个 加载 图像 出现 )
更新 2 :
我 在 这 方面 取得 了 一些 成功 :

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

格式
但是 $( " #s2id_autogen1 " ) . val ( ) 不是 静态 的 , 总是 在 变化 , 所以 这种 方法 只 工作 一 次 ... 另外 , 我 仍然 需要 更新 显示 的 结果 。 我 可以 在 select2 div 上 使用 " refresh " 来 更新 结果 , 但是 div 会 改变 它 的 id , 并且 $( " #s2id_ListaValores " ) . on ('keyup ' , function ( e ) 事件 将 不 起 作用 。

zpjtge22

zpjtge221#

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

//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);
    }
7rfyedvj

7rfyedvj2#

目前,在粘贴时,这在当前版本的select 2中是不可能的,因为它使用input type=“text”作为它的输入字段,并且浏览器在粘贴时会剥离换行符。
为了使这个工作,select 2将需要被打补丁,以使用一个文本区域代替。我有一个打开的拉请求来完成这一点,你可以在这里查看:https://github.com/select2/select2/pull/4795如果/当我的pull请求被合并进来时,你应该能够使用指定的字符作为tokenSeparators,但是在这之前,如果你愿意的话,你可以下载我的fork来解决你的问题。

9bfwbjaz

9bfwbjaz3#

请 尝试 使用 以下 内容 作为 " enter " 和 " tab " 键 的 标记 分隔 符 。

tokenSeparators: [';', '\n', '\t']

中 的 每 一 个
" enter " 键 通常 会 触发 Select2 的 选择 , 但 换行符 ( " enter " 键 在 另 一 个 程序 中 " ) 不会 。 您 可以 使用 \n 来 指示 Select2 这些 字符 也应 被 视为 分隔 符 。
Tab 键 也 会 出现 同样 的 情况 , 通常 它 应该 选择 当前 突出 显示 的 值 , 并且 在 从 另 一 个 源 加载 时 使用 \t 作为 分隔 符 。
请 记住 , 只有 在 粘贴 需要 标记 化 的 数据 时 , 这种 差异 才 真正 重要 , 因为 Select2 绑定 了 这 两 个 键 , 会 自动 标记 化 它们 。

相关问题