JQuery UI Autocomplete - меню исчезает при зависании
Я пытаюсь использовать jQuery UI Autocomplete, чтобы открыть список имен людей в базе данных MySQL. Основная функция работает - при вводе двух или более букв отображается список возможных имен, но когда я наводил указатель мыши на список или нажимал клавишу "вниз" для доступа к списку, он исчезает (2 скриншота ниже могут помочь объясните это).
Это означает, что автозаполнение становится бессмысленным, поскольку я не могу получить доступ к списку! Если кто-то может помочь, я буду очень благодарен! Скриншоты и код размещены ниже.
Введите первые несколько символов и появится меню
![Screenshot 1]()
Но наведите указатель мыши или нажмите клавишу "вниз", и он исчезнет, прежде чем можно будет сделать выбор.
![Screenshot 2]()
HTML:
<div id="chooseaccount">
Choose Account to Edit
<div id="iechooseaccountlabel" class="labeldiv">
<!--[if IE]>
Enter Student Name
<![endif]-->
</div>
<input type="text" class="inputs" id="editname" placeholder="Enter Student Name" />
</div>
JQuery
$(document).ready(function(){
$("#editname").autocomplete({
source: "names.php",
minLength: 2,
});
});
PHP:
<?php
$mysqli = new mysqli('********', '********', '**********', '*********');
$text = $mysqli->real_escape_string($_GET['term']);
$query = "SELECT name FROM users WHERE name LIKE '%$text%' ORDER BY name ASC";
$result = $mysqli->query($query);
$json = '[';
$first = true;
while($row = $result->fetch_assoc())
{
if (!$first) { $json .= ','; } else { $first = false; }
$json .= '{"value":"'.$row['name'].'"}';
}
$json .= ']';
echo $json;
?>
Ответы
Ответ 1
Ошибка возникает из-за конфликта, который возникает, когда файлы два jQuery UI загружаются одновременно в браузер клиента. Если вы достигнете пика в разделе <head>
, вы, вероятно, увидите, что на нем есть два разных файла jQuery UI. Просто удалите его, и он будет работать.
Ответ 2
У меня была та же проблема, но у меня только один тэг jquery-ui script в DOM за раз. Я загружал контент с помощью Ajax, который включал тег script. Если бы я сделал это дважды на одной странице, это сломало бы всплывающее окно автозаполнения, хотя содержимое второго запроса заменяло содержимое первого. Один способ заключается в том, чтобы добавить эту строку перед отображением содержимого, содержащего jquery-ui script:
$.ui = null;
Ответ 3
Эта ошибка возникает, когда два файла jQuery UI загружаются в ваш браузер одновременно. Это может привести к конфликту jquery. Удалите неиспользуемый файл пользовательского интерфейса jquery, чтобы решить эту ошибку.
В моем случае файл jquery-ui.min.js был непреднамеренно включен из папки с данными. Чтобы удалить его, я добавил один код в компоненты в config/main.php
'clientScript' => array(
'scriptMap' => array(
'jquery-ui.min.js' => false,
)),
Ответ 4
Файл jquery, который загружается в ваш заголовок, содержит весь элемент пользовательского интерфейса, и тот, который автоматически добавляется в ваш файл, имеет элемент children, который не нужно загружать, поэтому его следует удалить.
Ответ 5
У меня была такая же проблема, и я не использовал JQuery UI дважды, мой jquery UI был частью jquery DataTable.
Моя проблема была решена с помощью следующего кода
Примечание: с этим кодом нам нужно написать код для закрытия UL, когда мы не нажимаем на UL
$(".gettingContactList").autocomplete({
source:this.contactList,
/*following focus function was written because when mouse
was being hovered over the menu, the menu was disappearing*/
focus:function(e,ui) {
$(e.toElement).parents().show()
}
})
Ответ 6
У меня была похожая проблема с typeahead
Я использовал focus() и проблема была решена.
Пример:
$(ele).typeahead({source: $scope.varMap['abc'], items: undefined});
$(ele).focus();