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. Я действительно хотел бы знать, как отследить это - какие-нибудь намеки?