Захват событий в моделях AJAX - PullRequest
0 голосов
/ 30 декабря 2018

Хорошо, в этом проекте у меня сложная настройка.Это игра Phaser 3.Я загружаю все свои скрипты в заголовок HTML-файла.window.onload вызывает App.start(), который настраивает и загружает Phaser и сцены.В моем классе сцены заголовка я делаю вызов ajax и получаю HTML-шаблон, который затем отображается в модальном режиме.Я не могу обработать события в сгенерированном модальном для работы.Я пробовал:

$('#loginForm').on('submit', (event) => {
    event.preventDefault();
    let values = $('#loginForm').serialize();
    console.log(values);
}

и

 $(document).on('submit', '#loginForm', (event) => {
     event.preventDefault();
     let values = $('#loginForm').serialize();
     console.log(values);
}

, а также пытался привязать к фактической кнопке отправки.Со всем, что я пробовал, страница перезагружается и обрабатывает форму как отправку получения (значения добавляются в URL).Я должен отметить, что ни action, ни method формы не были установлены;только id.

Что можно сделать для захвата события отправки?

РЕДАКТИРОВАТЬ: Добавление кода

App.js

let App = function() {};
App.prototype.start = () => {
    let scenes = [];
    scenes.push(Loading);
    scenes.push(Title);
    scenes.push(Start);

    let config = {
        type: Phaser.AUTO,
        width: 900,
        height: 600,
        parent: 'gameDiv',
        scene: scenes
    };

    let game = new Phaser.Game(config);

    ...
};

Title.js (текущее тестирование)

class Title extends Phaser.Scene {
    constructor(){
        super({key: 'Title'});
    }

    preload(){}

    create(){
        let _t = this;

        let btnLogin = this.add.sprite(300, 350, 'login');
        let btnRegister = this.add.sprite(570, 350, 'register');
        let logoText = this.add.bitmapText(80, 100, 'Lombardic', 'Dragon Court', 108);

        btnLogin.setInteractive();
        btnRegister.setInteractive();

        btnLogin.on("pointerdown", (pointer) => {
            DC.templateCall('user', 'mode=login_tpl', () => {
                DC.templateFormHandler('loginForm', (event) => {
                    event.preventDefault();
                    let loginData = $("#loginForm").serialize();
                    console.log(loginData);
                    /*
                    modal.close();
                    Ajax.call('user', params, (result) => {
                        if(result.status){
                            _t.scene.start('Start', { fr: result.data.first_run, hc: result.data.has_char });
                        }else{
                            DC.modal('LoginError', '<div>'+result.error+'</div>', () => {});
                        }
                    });
                    */
                });
            });
        });
    }
}

Функция templateFormHandler:

templateFormHandler: (id, callback) => {
    $("#"+id).on("submit", callback);
}

1 Ответ

0 голосов
/ 30 декабря 2018

Я все еще не могу найти законную причину того, что приведенный выше код не работает, но в качестве обходного пути я просто переместил обработчики в сам файл шаблона, и все работает нормально.Я полагаю, что это вопрос области видимости.

...