Select2 преобразует все выпадающие списки при загрузке страницы, хотя и не вызывается

У меня есть приложение Rails, которое использует jQuery и Select2. На определенной странице у меня есть ряд SELECT выпадающие. Некоторые из них должны работать с Select2; остальные проще и должны работать с собственным выпадающим виджетом.

Сама страница является поисковой страницей с использованием Ajax. Каждый раз, когда элемент изменяется (включая все раскрывающиеся списки и другие, например, полнотекстовое поле поиска), страница обновляется.

Элементы, для которых я хочу использовать Select2, имеют уникальные идентификаторы, и я называю их следующим образом:

$("#dropdown-one").select2({
    // my options
});
$("#dropdown-two").select2({
    // my options
});

Вот ошибка:

Когда я открываю страницу изначально, все SELECT раскрывающиеся списки показывают, что это Select2, с функциональностью и стилями CSS - включая те, которые должны остаться родными. Это даже происходит, когда я комментирую конкретные звонки .select2()т.е. когда нигде в коде нет явного вызова .select2(),

Однако, как только я внесу какие-либо изменения в поле ввода, инициировав, таким образом, вызов Ajax, все раскрывающиеся списки будут добавлены для работы в соответствии с ожиданиями - то есть раскрывающиеся списки Select2 - это Select2, а исходные теперь являются родными. Это происходит как в Firefox, так и в Chrome.

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

Не уверен, что это уместно: один из возможных выпадающих определен через select_tagодин в простом HTML в .html.erb файл. Так что, похоже, это не является основной причиной.

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

Дополнение:

Теперь я добавил следующий код на страницу, не связанную с другим, в том же приложении - там, где его нет. SELECT кроме этого добавил:

<script>
  debugger;
</script>

<select id="watchme" onchange="debugger;">
  <option>x</option>
</select>
<br/><br/><br/>
<script>
  debugger;
  var obj = $("#watchme");
  var o = Object.seal(obj);
  var of = Object.freeze(obj);

  window.alert("#" + obj.attr("id") + ":\n"
    +"isSealed? "+Object.isSealed(obj)+"\n"
    +"isFrozen? "+Object.isFrozen(obj)+"\n"
    )

</script>

Это правильно сообщает, что объект и запечатан и заморожен. Тем не менее, когда страница завершает загрузку чего-либо, где-то удается преобразовать SELECT в виджет Select2. Я действительно хотел бы знать, как отследить это - какие-нибудь намеки?

0 ответов

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