Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   События на форму после подгрузки. (https://javascript.ru/forum/events/85024-sobytiya-na-formu-posle-podgruzki.html)

Анатолий1984 11.03.2023 11:54

События на форму после подгрузки.
 
Добрый день

Подгружаю форму кросброузерно аяксом. После подгрузки подключается скрипт
var wrgsv = {
    // идентификатор HTML элемента в который будет размещен виджет
    idBox: 'wrgsv',
    // путь до страницы возвращающей виджет
    url_wiget: 'https://мойсайт/widget.php',
    // путь до страницы стилей виджета
    url_style: 'https://мойсайт/widget.css',
    url_script: 'https://мойсайт/js.js',
    // метод инициализации виджета
    init: function(id) {
        // если идентификатор отсутствует, то будем использовать
        // идентификатор HTML элемента для размещения виджета по умолчанию (т.е. "wrgsv")
        if (!id) { id = this.idBox; }
        if (document.getElementById(id)) {
            // подключаем стили виджета
            this.addStyle();
            try {
                // для кросс-доменного запроса создаем один из ниже указанных объектов
                var XHR = ("onload" in new XMLHttpRequest())?XMLHttpRequest:XDomainRequest;
                // создаем экземпляр объекта
                var xhr = new XHR();
                // запрос на другой домен (асинхронный)
                xhr.open('GET', this.url_wiget, true);
                // событие отслеживает, что запрос был успешно завершён
                xhr.onload = function() {
                    // если существует ответ
                    if (this.response) {
                        // добавляем полученный ответ в HTML элемент
                        document.getElementById(id).innerHTML = this.response;
                    }
                }
                xhr.onerror = function() { console.log('onerror '+this.status); }
                // отсылаем запрос
                xhr.send();
            } catch(e) {}
            this.addScript();
        }
            // если на странице не существует HTML элемента с указаным идентификатором
        // выводим сообщение: блок с идентификатором id="id" отсутствует
        else { console.log('The specified block id="'+id+'" is missing'); }
    },
    // метод подключения стилей виджета
    addStyle: function() {
        style = document.createElement('link');
        style.rel = 'stylesheet';
        style.type = 'text/css';
        style.href = this.url_style;
        document.head.appendChild(style);
    },

    addScript: function() {
            style = document.createElement('script');
            style.src = this.url_script;
            document.head.appendChild(style);
    },
};



куском кода подключается скрипт https://мойсайт/js.js
addScript: function() {
            style = document.createElement('script');
            style.src = this.url_script;
            document.head.appendChild(style);
    },



следующего содержания

document.addEventListener('DOMContentLoaded', function () {
    console.log('ddfdfdfdf');
});


в консоле 'ddfdfdfdf' отображается через раз

В общем надо запускать console.log('ddfdfdfdf'); только после подгрузки формы.

Другими словами проверять что форма аяксом подгружена и только после этого подключать и запускать скрипт


Как то так

рони 11.03.2023 12:01

Анатолий1984,
строку 36 перенести в конец строки 29

voraa 11.03.2023 12:02

Ну так и вызывайте функцию addScript в обработчике события xhr.onload.
Только нужно еще ловить событие onload скрипта и onsole.log('ddfdfdfdf'); вызывать после загрузки скрипта.

рони 11.03.2023 12:08

Цитата:

Сообщение от Анатолий1984
Другими словами проверять что форма аяксом подгружена и только после этого подключать и запускать скрипт

медитировать тут

Анатолий1984 11.03.2023 14:59

Спасибо. Буду разбираться


Часовой пояс GMT +3, время: 14:11.