18

我在 jquery 对话框中使用 select2 插件,但不起作用。下拉时,焦点移动到输入控件,但立即退出,不允许我输入任何内容。

这是 HTML:

<div id="asignar_servicio" title="Asignar servicios a usuarios">
    <input type="hidden" class="bigdrop" id="a_per_id" />
</div>

这是javascript代码:

        $( "#asignar_servicio" ).dialog({
            autoOpen: false,
            height: 500,
            width: 450,
            modal: true,
            buttons: {
                "Cancelar": function () {
                    $('#asignar_servicio').dialog('close');
                }
            }
        });
        $("#a_per_id").select2({
            placeholder: "Busque un funcionario",
            width: 400,
            minimumInputLength: 4,
            ajax: {
                url: "@Url.Action("Search", "Personal")",
                dataType: 'json',
                data: function (term, page) {
                    return {
                        q: term,
                        page_limit: 10,
                    };
                },
                results: function (data, page) {
                    return { results: data.results };
                }
            }
        }).on("change", function (e) {
            var texto = $('lista_personal_text').val().replace(/ /g, '');
            if (texto != '')
                texto += ',';
            texto += e.added.text;

            var ids = $('lista_personal_id').val().replace(/ /g, '');
            if (ids != '')
                ids += ',';
            ids += e.added.id;
        });

我在其他页面中有相同的代码,它可以工作。

任何帮助将不胜感激,

谢谢詹姆

4

11 回答 11

25

jstuardo 的链接很好,但该页面上有很多内容需要筛选。这是您需要的代码:

$.ui.dialog.prototype._allowInteraction = function(e) {
    return !!$(e.target).closest('.ui-dialog, .ui-datepicker, .select2-drop').length;
};

只需将它添加到您设置 select2 下拉列表的任何位置。

于 2013-08-22T16:55:22.753 回答
10

一个简单的方法:

$.ui.dialog.prototype._allowInteraction = function (e) {
    return true;
};

在你设置 select2 之后添加这个

于 2016-10-17T08:14:14.673 回答
5

或者试试这个: Select2 在嵌入引导模式时不起作用

tabindex="-1"从模态 div 中删除

于 2013-11-05T13:45:54.773 回答
3

我找到了这个解决方法。https://github.com/ivaynberg/select2/issues/1246

干杯詹姆斯

于 2013-06-06T15:36:21.610 回答
2

我发现的最佳解决方案是通过删除 modal:true 使对话框不是模态对话框。完成此操作后,页面将按需要运行。

经过一段时间的斗争,我找到了另一个选项,可以让您将对话框保持为模态。如果将 select2 的 css 修改为如下所示:

 .select2-drop {
    z-index: 1013;
}

.select2-results {
    z-index: 999;
}

.select2-result {
    z-index: 1010;
}

请记住,这可行,但是如果您在同一页面上打开很多对话框,它最终会超过指定的 z-index,但是在我的用例中,这些数字完成了工作。

于 2014-09-08T18:05:04.470 回答
2

来自github 问题线程的 select2 4.0 修复的新版本是关于这个问题的:

if ($.ui && $.ui.dialog && $.ui.dialog.prototype._allowInteraction) {
    var ui_dialog_interaction = $.ui.dialog.prototype._allowInteraction;
    $.ui.dialog.prototype._allowInteraction = function(e) {
        if ($(e.target).closest('.select2-dropdown').length) return true;
        return ui_dialog_interaction.apply(this, arguments);
    };
}

只需在创建任何包含 select2 的模式对话框之前运行它。

此修复程序的 JSFiddle 实际操作

于 2015-08-19T15:32:18.397 回答
1

没有足够的声誉来评论以前的帖子,但我想添加这段代码:

 $('#dialogDiv').dialog({
                title: "Create Dialog",
                height: 410,
                width: 530,
                resizable: false,
                draggable: false,
                closeOnEscape: false,
                //in order for select2 search to work "modal: true" cannot be present. 
                //modal: true,
                position: "center",
                open: function () { },
                close: function () { $(this).dialog("distroy").remove(); }
            });
$("#displaySelectTwo")select2();

更新到较新版本的 JQuery 和 Select2 目前在我们的应用程序中不是一个选项。(使用 JQueryUI v1.8 和 Select2 v1)

于 2014-09-08T18:23:32.713 回答
1

在您的 select2() 声明之后添加它。

$.ui.dialog.prototype._allowInteraction = function (e) {
    return !!$(e.target).closest('.ui-dialog, .ui-datepicker, .select2-dropdown').length;
};
于 2015-04-09T20:16:24.050 回答
0

我已经成功使用了以下修复:

$.fn.modal.Constructor.prototype.enforceFocus = function () {
        var that = this;
        $(document).on('focusin.modal', function (e) {
            if ($(e.target).hasClass('select2-input')) {
                return true;
            }

            if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
                that.$element.focus();
            }
        });
    }
于 2014-05-07T07:31:06.707 回答
0

我可以通过从对话框选项中删除选项来解决这个问题:'modal: true'。
它工作得很好。

于 2015-05-27T04:09:46.853 回答
0

对于任何使用 Select2 v4.0.12 的人来说

我正在使用 Select2 选项dropdownParent

我设置了 dropDownParent 值,但仍然有问题。

dropdownParent: $("#ReportFilterDialog")

为我解决的问题是将值设置为,以选择模式对话框的外层:

dropdownParent: $("#ReportFilterDialog").parent()

于 2020-03-13T15:49:39.760 回答