Datalist на сафари JS Поллифилл

Я создаю веб-приложение Google Script и пытаюсь получить списки данных, работающих в Safari для Mac и, в основном, для устройств IOS. приведенный ниже код работает для небольшого списка данных, однако у меня есть более 30000 записей списка данных, которые я хочу показать. Цель списка данных - показать соответствующие записи при вводе идентификационного номера запаса. например, если набрать "B", то получится синий и черный, или "ue" покажет синий. код отлично работает для небольшого списка, но когда я вхожу во все 30000 предметов инвентаря, он падает на моем устройстве ios и загружается на Mac Safari вечно. Я считаю, что это связано с тем, что код должен "преобразовывать" каждый элемент во что-то еще. Мой мыслительный процесс таков: если бы я знал, во что он конвертирует элемент, я мог бы просто установить объекты списка данных в качестве объекта с самого начала. Когда я использую это приложение на Android или компьютере с Windows, 30000 предметов инвентаря появляются мгновенно.;

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Color Datalist</title>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" type="text/css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
</head>
<body>
<input type="text" name="color" id="color" value="" list="colorlist" />
<datalist id="colorlist">
    <select style="display: none;">
        <option value="Black" />
        <option value="Blue" />
        <option value="Dark Green" />
        <option value="Grey" />
        <option value="Green" />
        <option value="Red" />
        <option value="White" />
        <option value="Yellow" />
    </select>
</datalist>
<script>
$window.load(function () {
    var nativedatalist = !!('list' in document.createElement('input')) && 
        !!(document.createElement('datalist') && window.HTMLDataListElement);

    if (!nativedatalist) {
        $('input[list]').each(function () {
            var availableTags = $('#' + $(this).attr("list")).find('option').map(function () {
                return this.value;
            }).get();
            $(this).autocomplete({ source: availableTags });
        });
    }
});
</script>
</body>
</html>

1 ответ

Вместо того, чтобы использовать polyfill, я использовал awesomeplete. awesomeplete отлично работал на сафари, Google Chrome и края!. чтобы реализовать это, бросьте файл js на свою страницу, затем используйте теги. их веб-сайт предоставляет множество вариантов документации и настроек. http://leaverou.github.io/awesomplete/

Другие вопросы по тегам