Почему Select2 не работает хорошо на устройстве iOS?

Я использую библиотеку select2 из шаблона администратора пикселей. Я заметил, что он хорошо работает на настольных и Android устройства. Тем не менее, раскрывающийся список не открывается при просмотре на устройстве iOS. Я не знал почему.

$(document).ready(function() {
  var init = [];

  init.push(function() {
    var $select2 = $("#Salutation,#Gender").select2();
    $select2.on('select2:select select2:unselect', () => {
      $(":focus").blur();
    });
  })

  window.PixelAdmin.start(init);
});
body .select2-container.select2-container--default.select2-container--open {
  top: 305px!important;
  left: 22px!important;
}

.select2.select2-container.select2-container--default.select2-container--below.select2-container--open {
  top: auto!important;
}
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Select2</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="pixel-admin.min.js"></script>
<link rel="stylesheet" href="pixel-admin.min.css">
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.4.5/select2.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/3.4.5/select2.min.js"></script>

<div class="container">
  <div class="row">
    <div class="col-xs-4 col-xs-offset-4">
      <h3>Application Form</h3>
      <form class="form" action="/action_page.php">
        <div class="form-group">
          <label for="GivenName">Given Name:</label>
          <input class="form-control" type="text" id="GivenName">
        </div>
        <div class="form-group">
          <label for="Surname">Surname:</label>
          <input class="form-control" type="text" id="Surname">
        </div>
        <div class="form-group">
          <label for="Salutation">Salutation:</label>
          <select class="form-control" name="" id="Salutation">
            <option value="Mrs">Mrs</option>
            <option value="Mr">Mr</option>
            <option value="Miss">Miss</option>
          </select>
        </div>
        <div class="form-group">
          <label for="Gender">Gender:</label>
          <select class="form-control" name="" id="Gender">
            <option value="Female">Female</option>
            <option value="Male">Male</option>
            <option value="Transgender">Transgender</option>
          </select>
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>
    </div>
  </div>
</div>

Я включил pixel-admin js для вас здесь.

Примечание он работает, когда я использую функцию рабочего стола запроса на устройстве iOS.

какие будут предложения? Пожалуйста пожалуйста, помогите мне. Спасибо

2 ответов


Я сделал 2 страницы для вас первый содержит выпадающее меню, которое останется тем же видом , той же функциональностью над мобильными и настольными браузерами . пожалуйста, откройте его через мобильные браузеры ,

нажмите здесь, чтобы просмотреть его ...

на вторая страница, я скорректировал код, и выпадающий список теперь должен работать вместе с библиотеками pixel & select2, сохраняя тот же вид, что и на мобильном / рабочем столе браузер ,

вы сможете использовать их на мобильный браузер двойным щелчком мыши в каждом выпадающем меню, чтобы открыть его и выбрать значение , я оставил его для вас, так что вы можете изменить его на основе события onclick он будет скрывать меню при выборе для настольных или мобильных браузеров.

// show/hide the menu when examples is clicked
$(".dropdown-toggle").on("click", function () {
$(".dropdown-menu").toggle();
});

// судоходства

$("#nav").on("click", "li", function () {
$("#menu-icon").click();
document.getElementById("flag").focus();
//$("#nav").slideToggle();
}); 

и для мобильных браузерах, вы можете использовать НИЖЕ, чтобы скрыть меню

$(документ).на('нажмите touchstart', function () {}

пожалуйста, проверьте ссылки и найти использованные ресурсы/файлы

нажмите здесь, чтобы просмотреть его ...

оставшаяся работа должна быть CSS и код стиля, вы можете управлять этим, как вам нравится, как я вижу, бессмысленно настраивать поля, не принимая ваши взгляды на него .

Что касается объяснения того, как я мог бы достичь этой задачи, на самом деле мне пришлось ограничить способ загрузки java-скрипта, кроме того, я отредактировал почти все библиотеки js и загружать их через скрипты J. S во время резервного копирования J-запроса .

вот шаги для достижения этого:

первый :

загрузить библиотеку jquery через резервный

второй :

загрузить admin-pixel.Яш загрузить пиксель.в CSS

Шаг Третий :

загрузить select2.Яш нагрузка select2.в CSS

они должны быть загружены последовательно и наконец, после загрузки вышеуказанного вы должны написать этот код, чтобы выпадающее меню не менялось в мобильном браузере, и оно останется таким же функциональным, как и настольные браузеры, поместите их на тег скрипта после загрузки J-запроса, а затем загрузите библиотеку select 2

$('select').select2({
minimumResultsForSearch: -1
});

заключительные шаги :

вы должны написать эти мета-теги и css на своей html-странице

<meta HTTP-EQUIV="MSThemeCompatible" content="Yes" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<meta id="viewport" name="viewport" content="width=device-width,initial- 
scale=1.0,user-scalable=no">

CSS код поместите его на "" теги:

html {
touch-action: manipulation;
}

As по вашему запросу задача выполнена, и вы можете пройти код по всем файлы, чтобы увидеть, как библиотеки js загружаются последовательно, вы можете загрузить все ресурсы вместе с html-страницей

по этой ссылке

альтернативное решение для вас , вдали от ваших библиотек, вы можете создать выпадающий список полей, которые они не имеют проблемы функционирования на мобильном браузере, а затем использовать их на странице, которые имеют проблемы , и при выборе пользователя на этих рабочих выпадающие списки полей, trans-fare / переместить значение в сломанный принадлежит select2 (сделать это через java-скрипт и скрыть сломанное выпадающее меню с отображением: нет;

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

дайте мне знать, если есть какие-либо проблемы, так как я не могу выполнить проверку на вашем рабочем сервере. я будет редактировать мой ответ в конечном итоге для корректировки моего ответа .

удачи


не уверен, что вы пытаетесь достичь, но если вы хотите нажать свои вызовы в массив, вы можете сделать это, как показано ниже:

var init = [];
init.push(
    $("#Salutation,#Gender").select2().on('select2:select select2:unselect', function () {
        $(":focus").blur();
    })
);

или вы можете использовать IIFE, как показано ниже:

var init = [];
init.push(function () {
    var $select2 = $("#Salutation,#Gender").select2();
    $select2.on('select2:select select2:unselect', () => {
        $(":focus").blur();
    });
}());