удалить событие, созданное третьей стороной jQuery - PullRequest
0 голосов
/ 13 июля 2020

Здесь сильная головная боль.

У меня есть одностраничное приложение, использующее нокаут-компоненты и машинописный текст. Я интегрируюсь со сторонним поставщиком платежей, который вставляет iframe. Проблема, с которой я сталкиваюсь, заключается в том, что когда рабочий процесс перезапускается, создается новый прослушиватель событий, и поэтому платежи обрабатываются дважды (к счастью, в настоящее время это тестовая система) или три раза, если рабочий процесс выполняется в третий раз ...

Слушатель событий после первого запуска рабочего процесса: Image showing workflow run 1

Event listener after second workflow run

enter image description here

Looking at the library (https://i4m.shift4test.com/js/jquery.i4goTrueToken.js) похоже, что он должен самостоятельно обрабатывать удаление слушателей событий, если он уже обнаруживает один, что означает, что проблема связана с моим кодом.

Я знаю, что проблема связана со мной, вероятно, использующим анонимную функцию:

   private invokeIFrame = (): void => {
        get("https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js", () => {
            get("https://i4m.shift4test.com/js/jquery.i4goTrueToken.js", () => {
                (<any>$('#form-main')).i4goTrueToken({
                    url: this.configuration().i4go_i4m_url(),
                    server: this.configuration().i4go_server(),
                    accessBlock: this.configuration().i4go_accessblock(),

Code omitted for brevity

Я пытался извлечь код в обычную функцию, но безуспешно:

    private invokeIFrame = (): void => {
        get("https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js", () => {
            get("https://i4m.shift4test.com/js/jquery.i4goTrueToken.js", () => this.loadIframe())
        });
    }

    private loadIframe = () => {
        (<any>$('#form-main')).i4goTrueToken({
            url: this.configuration().i4go_i4m_url(),
            server: this.configuration().i4go_server(),
            accessBlock: this.configuration().i4go_accessblock(),

Code omitted for brevity

К сожалению, теги скриптов в html не работают. Все еще не уверен, почему это так, и я не могу привязать его к моему экземпляру jquery (несмотря на то, что он выставил его через webpack et c), поэтому мне нужно привязать его, как указано выше, но несколько прослушивателей событий вызывают множественную оплату обработка. В идеале я бы сам удалил события вручную. Любые мысли приветствуются. Спасибо.

...