Динамическое обновление скрытых параметров форм crm b24
Немного о сути проблемы
Если вам доводилось делать персонализированную форму в црм битрикс и динамически прокидывать туда постоянно изменяющиеся параметры, вы наверняка тоже немного поседели) Речь пойдет о click форме, не inline.
Проблема в том, что на данный момент все решения, присутствующие в интернте, либо костыльные, либо устаревшие, либо я просто плохо гуглю. Под костыльными решениями я понимаю такой код, когда кучей действий вы сначала пытаетесь уничтожить форму битрикс, потом таким же жутким способом ее инициализировать. И так каждый раз при ее открытии.
Да, есть другая прекрасная короткая функция:
window.addEventListener("b24:form:init", (event) => {
let form = event.detail.object;
if (form.identification.id == 10) {
form.setProperty("test", "value");
}
});
Но проблема ее заключается в том, что работать на пробрасывание значений в скрытые поля она будет только при инициализации\первом открытии формы. Но вот если человек форму открыл, потом закрыл, поменял что-то там в параметрах, которые будут пробрасываться в форму, потом снова форму открыл и отправил, значения там останутся старыми, с первого открытия/инициализации.
Решение
Я, честно, почти отчаялась как-то красиво решить эту задачу, когда вдруг мне пришла идея прослушивать все события window. Я врубила monitorEvents(window) и поняла, что событие "b24:form:init" таким способом не ловится, только с конкретной донастройкой monitorEvents(window, "b24:form:init") . Стало ясно, что никакие события форм я увидеть не смогу. Тогда, я просто начала методом тыка перебирать события, в надежде найти нужное. И, о чудо!, я нашла нужное мне событие. Угадаете?
Hidden text
"b24:form:show"
Да все, достаточно тривиально, но когда этого нигде нет, то не так уж это и просто как кажется. Я не смогла найти в интернете ни полного списка событий битрикс форм, ни даже потом конкретное событие, которое я обнаружила.
В заключение
Если вы все это и так уже знаете, простите, что отняла у вас время, но скорее всего если вы догуглили до моей статьи, значит тоже искали решение. И я надеюсь, что смогла вам помочь :) Ведь когда я решала эту задачу, мне так не хватало такой статьи на Хабре или стековерфлоуе. Чистого когда вам и побед над всеми возникающими трудностями!)