Редактор Pagedown прикрепляет обработчик к диалоговому окну изображения

Я создал свой собственный диалог загрузки библиотеки с модальным Semantic UI. Я пытаюсь интегрировать этот диалог в редактор Pagedown.

var converter = Markdown.getSanitizingConverter();
var editor = new Markdown.Editor(converter);

editor.hooks.set("insertImageDialog", function(callback) {
    uploadModal.load(); // The dialog HTML gets loaded asynchronously

    $('body').on('selection', '.upload-modal', function(e, src) {
        console.log(src);
        callback(src);
    });

    return true; // tell the editor that we'll take care of getting the image url
});

Все работает нормально при первом выборе изображения из диалога, но после этого ломается:

Uncaught TypeError: невозможно вызвать метод removeChild для null Markdown.Editor.js

Согласно этому вопросу SO, это как-то связано с определением обработчика событий несколько раз, но я не могу обернуть мою голову вокруг этого.

Дополнительная информация:

HTML для инициализации модального окна загружается асинхронно, вот код JS:

var uploadModal = (function() {

    /**
     * Load the upload modal.
     */
    this.load = function() {
        var $modal = $('.upload-modal');

        if ($modal.length) {
            // Show the already existing modal.
            $modal.modal('show');
        } else {
            // Get the HTML
            var request = $.get(appUrl('admin/upload/modal'));

            request.done(function(html) {
                // Make the modal.
                var $modal = $(html);

                $modal.modal({
                    observeChanges: true,
                    onApprove: function () {
                        var upload = $modal.find('.selected.upload'),
                            src = upload.find('.image > img').attr('src');

                        // Bind the event listener which will return the upload's source URL
                        $modal.trigger('selection', src);

                        return true;
                    }
                }).modal('show');

                // Some event handlers here    
            });
        }
    };
})();

Я загружаю модальное окно, вызывая uploadModal.load(), и наблюдаю всякий раз, когда изображение выбирается, присоединяя обработчик события «выбор».


person JasonK    schedule 03.01.2016    source источник
comment
У меня была проблема, похожая на вашу, моя работала один раз. то второй раз не работает. проблема может быть здесь $('body').on('selection', '.upload-modal', function(e, src) {... stackoverflow. ком/вопросы/39562057/   -  person Omari Victor Omosa    schedule 19.09.2016