Подтвердить что ты не робот

Jquery UI автозаполняется внутри модального диалога ui - предложения не отображаются?

Я использую виджет автозаполнения jquery ui внутри диалогового окна jquery ui. когда я набираю текст поиска, отступы текстового поля (ui-autocomplet-load), но не показывают никаких предложений.

var availableTags = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby", "python", "c", "scala", "groovy", "haskell", "perl"];

$("#company").autocomplete({        
    source : availableTags ,
minLength: 2
});

компания является идентификатором текстового поля для присоединения автозаполнения.

Я думал, что это может быть индекс z, поэтому я устанавливаю это:

.ui-autocomplete, .ui-menu, .ui-menu-item {  z-index: 1006; }

но он пока не отображается. Я помещаю автозаполнение на "регулярную" страницу и отлично работает.

Я использую jquery ui версии 1.8.2. любые идеи о том, где искать?

4b9b3361

Ответ 1

Я столкнулся с этим ответом при поиске этой же проблемы, однако ни одно из решений не было именно тем, что я хотел.

С помощью appendTo работал, sorta... Элементы автозаполнения отображались там, где они должны были быть, но полностью отбросили мое диалоговое окно в искаженный беспорядок неправильно расположенных элементов div.

Итак, в моем собственном файле css я создал следующее:

ul.ui-autocomplete {
    z-index: 1100;
}

Я уверен, что 1100 немного переборщил, но я просто хотел играть в это безопасно. Он хорошо работает и соответствует требованиям K.I.S.S. Метод.

Я использую jQuery 1.9.2 с jQueryUI 1.10.2.

Ответ 2

При использовании jQuery UI 1.10 вам не следует возиться с z-индексами (http://jqueryui.com/upgrade-guide/1.10/#removed-stack-option). Опция appendTo работает, но ограничивает отображение высотой диалога.

Чтобы исправить это: убедитесь, что элемент автозаполнения находится в правильном порядке DOM: autocomplete.insertAfter(dialog.parent())

Пример

 var autoComplete,
     dlg = $("#copy_dialog"),
     input = $(".title", dlg);

 // initialize autocomplete
 input.autocomplete({
     ...
 });

 // get reference to autocomplete element
 autoComplete = input.autocomplete("widget");

 // init the dialog containing the input field
 dlg.dialog({
      ...
 });

 // move the autocomplete element after the dialog in the DOM
 autoComplete.insertAfter(dlg.parent());

Обновление для проблемы z-index после нажатия диалогового окна

Z-индекс автозаполнения, кажется, изменяется после щелчка по диалогу (как сообщает MatteoC). Обходной путь ниже, кажется, исправить это:

Смотрите скрипту: https://jsfiddle.net/sv9L7cnr/

// initialize autocomplete
input.autocomplete({
    source: ...,
    open: function () {
        autoComplete.zIndex(dlg.zIndex()+1);
    }
});

Ответ 3

для одного или нескольких автозаполнений в том же диалоговом окне:

// init the dialog containing the input field
 $("#dialog").dialog({
      ...
 });

// initialize autocomplete
 $('.autocomplete').autocomplete({        
      source: availableTags,
      minLength: 2
 }).each(function() {
      $(this).autocomplete("widget").insertAfter($("#dialog").parent());
 });

Ответ 4

Я решил добавить атрибут z-index:1500 к моим divs в jquery.autocomplete.css, потому что JQuery UI Dialog устанавливает z-индекс между 1000 и 1005

ul.auto-complete-list {
    list-style-type: none;
    margin: 0;
    padding: 0;
    position: absolute;
    z-index: 1500;
    max-height: 250px;
    overflow: auto;
}

Ответ 5

Я решил это в bootbox следующим образом:

$( "#company" ).autocomplete({       
    source : availableTags ,
    appendTo: "#exportOrder"
});

Вам нужно только добавить список результатов в вашу форму.

Ответ 6

Недавно у меня была такая же проблема. Добавление этого в мой css файл разрешило его для меня:

.ui-autocomplete-input, .ui-menu, .ui-menu-item {  z-index: 2006; }

Сначала я попробовал ваше начальное значение z-индекса 1006, но это не сработало. Увеличение стоимости сработало для меня.

Ответ 7

    $("#company").autocomplete({        
    source : availableTags ,
    appendTo : $('#divName')
    minLength: 2
});

Примечание: $('# divName') divName будет именем модального тела.

Пример:

<form id="exportOrder">
        <div class="input-group">
            <input type="text" id="accountReferenceSearch" placeholder="Type Account Reference to search..." class="form-control" style="width:500px">
        </div>
    </div>
</form>

self.AttachAutoComplete = function () {
                    $('#accountReferenceSearch').focus(function () {
                        $('#accountReferenceSearch').autocomplete({
                            source: function (request, response) {},
                            minLength: 2,
                            delay: 300,
                            appendTo: $("#exportOrder")
                        });
                    });
                }

Ответ 8

В вашей реализации autocomplete добавьте appendTo: "#search_modal", где search_modal является идентификатором вашего модального файла.

Ответ 9

В моем случае добавление стилей в css не работает, но после добавления свойства zIndex точно в конструктор элемента jQuery ui он работает как прелесть.

Ответ 10

Это сделало трюк для меня:

ul.ui-front {
    z-index: 1100;
}

Ответ 11

У меня тоже была эта проблема. Я работаю в UserFrosting, который имеет bootstrap и select2, но не имеет jquery-ui в ядре. Моя автозаполнение находилось внутри модального всплывающего окна, где тег script и $(document).ready после html для модальной формы. После преследования всех видов несуществующих конфликтов и попыток сделать select2 (v 4) в combobox, я вернулся к взлому css, и это сработало:

.ui-autocomplete {z-index: 1061 !important;}

Моя среда

  • UserFrosting с jquery 1-11.2
  • самозагрузки-3.3.2,
  • самозагрузки покадрово
  • select2 v3.5.1
  • jquery-ui-1.11.4 (тема dot-luv)

Ответ 12

Добавьте в свой javascript следующий метод и вызовите его из события onload элемента body:

//initialization
function init(){
    var autoSuggestion = document.getElementsByClassName('ui-autocomplete');
    if(autoSuggestion.length > 0){
        autoSuggestion[0].style.zIndex = 1051;
    }
}

Это работает для меня:) Я получил это, посмотрев на вычисленный стиль модального диалога, чтобы узнать, что это за индекс z. Таким образом, вся функция - это захват окна автообновления, созданного jquery (одним из имен этого класса, которое может быть другим для вас, но идея остается тем же) и изменить его css, чтобы включить z-index на 1 пункт выше, чем z-индекс модального (который был 1050)

Ответ 13

У меня возникла одна и та же проблема, когда мне пришло в голову:

Всегда указывайте свой диалог перед настройкой автозаполнения.

Ive переключил их, et voilà!

Автозаполнение настраивается вокруг целевого объекта INPUT. Диалог создает новую разметку и CSS вокруг целевого контейнера. Мои варианты, которые появляются за диалогом или вне экрана.

Ответ 14

Попробуйте следующее: -
my_modal: модальный идентификатор
Использовать appendTo для автокоманды

$( "# input_box_id" ). Автозаполнения ({
  Источник: sourceArray/ссылка,
  appendTo: "# my_modal"
});

ссылка: fooobar.com/questions/426274/...

Ответ 15

Ответ Johann-S здесь работал у меня.

просто добавьте data-focus = "false" к кнопке или ссылке, вызывающей модальную форму

<button type="button" class="btn btn-primary" 
 data-toggle="modal" 
 data-focus="false"
data-target=".bd-example-modal-sm">Small modal</button>

Таким образом, вам не нужно возиться с z-индексами или переопределять загрузку, применяя фокус (он не называется)