Select2 4.0.0 AJAX-使用Tab选择突出显示的选项

MikeOShay

我正在通过AJAX提取用户ID和名称,并使用Select2进行搜索,但是我的用户要求能够通过按Tab键从预输入下拉列表中进行选择,从而像按Enter一样有效地进行处理。这是我的select2声明:

$("#user-select").select2({
    ajax: {
        url: "/api/User",
        method: "get",
        data: function (params) {
            return {
                search: params.term
            };
        },
        beforeSend: function () {
            $(".loading-results").text("Loading...");
        },
        processResults: function (data) {
            return {
                results: data
            };
        },
        cache: true
    },
    allowClear: true,
    placeholder: "Enter a User ID or Name",
    templateResult: function (data) {
        return "(" + data.id + ") " + data.name;
    },
    templateSelection: function (data) {
        return "(" + data.id + ") " + data.name;
    }

只要下拉列表可见,“。select2-search__field”似乎就是焦点元素,而突出显示的元素将获得“ select2-results__option--higheded”类。

我尝试了一些解决方案,但似乎没有任何效果,尤其是因为此元素在下拉列表打开时会出现或消失。不幸的是,我从尝试中丢失了代码,但是它们主要包括以下操作:当在突出显示的输入上单击Tab时,执行preventDefault,然后在突出显示的元素上触发click事件或在输入上触发enter键。

我也尝试过调整selectOnClose选项,但是总体上看似乎有问题,当我让它正常运行时会导致死循环,更不用说根据所按下的键来覆盖它了。

[编辑]
选定的解决方案有效,但未考虑指定的templateResult,而是显示“()undefined”。因此,我对其进行了调整,以将突出显示的答案添加为上级选择的选定选项,然后在该选择上立即调用更改事件。

...(与初始select2相同)

}).on('select2:close', function (evt) {
    var context = $(evt.target);

    $(document).on('keydown.select2', function (e) {
        if (e.which === 9) { // tab
            var highlighted = context.data('select2').$dropdown.find('.select2-results__option--highlighted');

            if (highlighted) {
                var data = highlighted.data('data');

                var id = data.id;
                var display = data.name;

                $("#user-select").html("<option value='" + id + "' selected='selected'>" + display + "</option>");
                $("#user-select").change();
            }
            else {
                context.val("").change();
            }
        }
    });
优化不当

我发现Sniffdk接受的答案不再适用于最新的jquery和select2库。它给了我一个Uncaught TypeError: Cannot read property 'id' of undefined

我想出了以下可行的解决方案(针对单选select2下拉菜单):

function pickSelect2OptionOnTab() {
    let $select;
    let optionSelected;
    let select2Closing = false;

    $('select').on('select2:closing', function(event) {
        select2Closing = true;
        $select = $(event.target);
        optionSelected = $('.select2-results__option--highlighted').text();
        setTimeout(function() {
            select2Closing = false;
        }, 1);
    });

    $(document).bind('keydown', function(event) {
        if (event.key === 'Tab' && select2Closing) {
            const val = $select.find('option').filter(function() {
                return $(this).text() === optionSelected;
            }).first().prop('value');
            $select.val(val);
            $select.trigger('change');
        }
    });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Select2 Ajax不显示结果

来自分类Dev

使用Ajax的jQuery Select2插件

来自分类Dev

Select2 Ajax无法选择从API提取的选项

来自分类Dev

如何克隆select2 v4 Ajax

来自分类Dev

使用Scala收集方法可帮助将[0,0,0,1,1,1,1,0,0,1,1]的列表转换为[3,4,2,2]

来自分类Dev

使用YII Framework的Select2 Ajax选项

来自分类Dev

如何从.select2()Ajax调用内部获取<select>的data属性以供select2使用?

来自分类Dev

select2使用ajax加载数据无法选择任何选项

来自分类Dev

jQuery Ajax显示0而不是Array

来自分类Dev

SELECT2 Ajax-预加载的选项

来自分类Dev

jQuery Select2防止在Ajax响应中选择

来自分类Dev

Select2用ajax加载设置选择的值

来自分类Dev

Select2 Ajax Laravel-结果未显示

来自分类Dev

Select2 JS 不显示来自 AJAX 的数据

来自分类Dev

Select2 JS使用Ajax加载远程数据

来自分类Dev

Select2在通话中使用动态Ajax URL

来自分类Dev

使用select2 ajax数据更新隐藏的输入

来自分类Dev

ajax成功返回0

来自分类Dev

如何使用select2初始化默认值并触发ajax请求(select2:select)?

来自分类Dev

从AJAX调用成功返回“ 0”或0?

来自分类Dev

使用Ajax在MVC4中上传图像时,Request.Files.Count始终为0

来自分类Dev

select2显示默认选项(静态),如果未找到,则进行ajax搜索

来自分类Dev

创建序列0、0、0、0、0、1、1、1、1、1、2、2、2、2、2、3、3、3、3、3、4、4、4、4、4 ,带有seq()的4

来自分类Dev

Select2 4.0.3无法使用Ajax调用填充其他select2字段

来自分类Dev

jQuery Ajax请求失败,并显示readyState:0错误

来自分类Dev

Select2:使用ajax数据源时添加和选择手动值

来自分类Dev

jQuery select2插件,默认情况下使用ajax选择加载

来自分类Dev

Select2允许在使用ajax填充项目时选择“错误的项目”

来自分类Dev

Ajax readyState始终返回0

Related 相关文章

  1. 1

    Select2 Ajax不显示结果

  2. 2

    使用Ajax的jQuery Select2插件

  3. 3

    Select2 Ajax无法选择从API提取的选项

  4. 4

    如何克隆select2 v4 Ajax

  5. 5

    使用Scala收集方法可帮助将[0,0,0,1,1,1,1,0,0,1,1]的列表转换为[3,4,2,2]

  6. 6

    使用YII Framework的Select2 Ajax选项

  7. 7

    如何从.select2()Ajax调用内部获取<select>的data属性以供select2使用?

  8. 8

    select2使用ajax加载数据无法选择任何选项

  9. 9

    jQuery Ajax显示0而不是Array

  10. 10

    SELECT2 Ajax-预加载的选项

  11. 11

    jQuery Select2防止在Ajax响应中选择

  12. 12

    Select2用ajax加载设置选择的值

  13. 13

    Select2 Ajax Laravel-结果未显示

  14. 14

    Select2 JS 不显示来自 AJAX 的数据

  15. 15

    Select2 JS使用Ajax加载远程数据

  16. 16

    Select2在通话中使用动态Ajax URL

  17. 17

    使用select2 ajax数据更新隐藏的输入

  18. 18

    ajax成功返回0

  19. 19

    如何使用select2初始化默认值并触发ajax请求(select2:select)?

  20. 20

    从AJAX调用成功返回“ 0”或0?

  21. 21

    使用Ajax在MVC4中上传图像时,Request.Files.Count始终为0

  22. 22

    select2显示默认选项(静态),如果未找到,则进行ajax搜索

  23. 23

    创建序列0、0、0、0、0、1、1、1、1、1、2、2、2、2、2、3、3、3、3、3、4、4、4、4、4 ,带有seq()的4

  24. 24

    Select2 4.0.3无法使用Ajax调用填充其他select2字段

  25. 25

    jQuery Ajax请求失败,并显示readyState:0错误

  26. 26

    Select2:使用ajax数据源时添加和选择手动值

  27. 27

    jQuery select2插件,默认情况下使用ajax选择加载

  28. 28

    Select2允许在使用ajax填充项目时选择“错误的项目”

  29. 29

    Ajax readyState始终返回0

热门标签

归档