bingo347
@bingo347
Crazy on performance...

Как определить, что к элементу подключен плагин select2 и корректно изменить его значение?

Всем доброго времени суток!
Пишу расширение для автозаполнения форм на сайтах, столкнулся с проблемой на сайте, который использует плагин select2, изменение value элемента не отображается визуально, а при отправке формы данные заполненные плагином уходят в запрос через раз (если быть точным, у меня (Chrome 50/Ubuntu 14.04) все отправляется, у заказчика (Chrome 50/Windows 8) - нет).
Пришел к мысли, что нужно управлять такими элементами формы через сам плагин.
У меня есть ссылка на нативный (не jQuery) domNode, на котором инициализирован плагин, в случае тестируемого сайта - это <select>, который оказывается скрытым благодаря select2

Собственно возникли вопросы:
Можно ли по элементу определить, что к нему подключен select2?
Как корректно менять value этого элемента?
Что делать в случае, если jQuery отсутствует в глобальном объекте (лежит в замыкании кода сайта)?
  • Вопрос задан
  • 390 просмотров
Пригласить эксперта
Ответы на вопрос 1
Можно ли по элементу определить, что к нему подключен select2?

Наверно можно
var elem = document.querySelector('select');

console.log(!!$.data(elem).select2);
console.log(elem.className === 'select2-hidden-accessible');
console.log(elem.nextElementSibling.className.indexOf('select2') === 0);

Как корректно менять value этого элемента?

Может надо триггерить изменения
// change value
// 1. jquery methos
$(elem).val('WY').trigger('change');

// 2. native
elem.value = 'WY'
if ("createEvent" in document) {
  var evt = document.createEvent("HTMLEvents");
  evt.initEvent("change", false, true);
  elem.dispatchEvent(evt);
}
else {
  elem.fireEvent("onchange");
}

Пример здесь jsfiddle.net/yurzui/n073jveu/


Что делать в случае, если jQuery отсутствует в глобальном объекте (лежит в замыкании кода сайта)?

По обстоятельствам) Может подгружать тогда. А jQuery обязательно нужен?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы