Как навесить плагин на ноду, которой изначально нет?
Есть форма заказа состоящая из нескольких шагов. Все шаги со своим html, кроме текущего изначально скрыты и появляются после заполнения предыдущего шага.
На третьем шаге у меня есть поле на которое я хочу навесить кастомный плагин jQuery, но так как его изначально в DOM'е нету - плагин тоже не вешается.
Единственный вариант, который мне приходит в голову это навешивать плагин при активации нужного шага в виде колбэка. НО этот вариант не подходит ввиду разброса элементам по всему сайту ( я просто везде не отловлю этот селектор в нужный момент ). Как навесить плагин в такой ситуации?
Это же частный случай - тут можно провести отдельную инициализацию для данного элемента, не трогая при этом общую инициализацию плагина для всего сайта
Константин Башаркевич: вот об этом и вопрос) Есть конструкция $(document).ready(function() { $('.some-el').myPlugin() }) Соотвественно на старте элемента не видно поэтому плагин не применяется. Как его применять когда элемент становится видно?
Дмитрий: вы же сами написали "навешивать плагин при активации нужного шага в виде колбэка".
При том, что конструкция $(document).ready(function() { $('.some-el').myPlugin() }) остается и никуда не девается.
Дмитрий: насколько я знаю, нет никаких эвентов на появление определенных элементов в DOM. Как правило такие задачи как раз таки решаются повторной инициализацией с помощью колбэков.
Константин Башаркевич: если я зарегаю на window событие initMyPlugin и будут делать trigger('initMyPlugin') при смене шагов заказа это будет правильный путь или как-то иначе?
Дмитрий: если говорить об этом как о подходе, то я не назвал бы его хорошим с точки зрения best practices. Событие должно идти от лица какой-либо сущности, информируя слушателей о ее действиях. При этом это сущность совершенно ничего не должна знать о слушателях события. В вашем же случае будет генерироваться событие четко направленное на одного конкретного слушателя, которое будет не сообщать о каком-либо действии, а провоцировать его. Хотя при этом конечно же все должно работать. Скорее тут форма заказа при смене шагов должна генерировать событие вроде changeStep, на которое должен подписаться слушатель для переинициализации плагина. Но на каждом ли шаге он вам требуется? Может юзать колбек все таки проще? )
Константин Башаркевич: однозначно все правильно описано. Исключительно "общее" по логике событие должно исходить от формы. Но с другой стороны, если говорить о моем плагине - это обычный кастомный селект. Довольно странно его подписывать по всему сайту на событие смены шага в одной форме, ведь он может использоваться в десятках других мест, где вообще никаких шагов нету.
А как вы предлагаете использовать колбек? Можно пример абстрактный?
А как насчет варианта повесить на некое событие через on('event','selector',function (){ initialization_code();})?
'selector' - тот элемент DOM, который появится
Писал об этом варианте в комментах. Пока вижу такой вариант, что при переключении шага мы делаем trigger('initMyCustomPlugin'), а плагин подписываем на это событие и делаем init при его возникновении. Но это обычная кастомизация select'a и довольно странно вешать на такую штуку глобальное событие