событие закрытия модального всплывающего окна magento 2 js


require(
        [
            'jquery',
            'Magento_Ui/js/modal/modal'
        ],
        function(
            $,
            modal
        ) {
            var options = {
                type: 'popup',
                responsive: true,
                innerScroll: true,
                title: 'Title',
                buttons: [{
                    text: $.mage.__('Proceed'),
                    class: '',
                    click: function () {
                        /* some stuff */
                        this.closeModal();
                    }
                }]
            };
            var popup = modal(options,$('#popup-modal'));            
            $('#popup-modal').modal('openModal');
        }
    );

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

Спасибо за ответы,

Всплывающее окно можно закрыть, нажав кнопку x или escape key.

Но я не думаю, что добавление нескольких событий для нажатия и нажатия клавиш - хорошая идея.

Author: Amit Singh, 2017-05-17

5 answers

Вам не нужно расширять модальный.

Вам просто нужно прослушать событие 'modalclosed' в элементе DOM, в котором был вызван модальный. Фактически функция modal() возвращает этот элемент, что делает код тривиальным.

$('#popup-modal').on('modalclosed', function() { 
  /*insert code here*/ 
});
 13
Author: Adam Nemitoff, 2020-10-08 14:35:35

Вам необходимо расширить функцию виджета _close в вашем пользовательском модуле.

Выполните следующие действия для достижения своей задачи:

Сначала создайте requirejs-config.js с кодом:

var config = {
map: {
    '*': {
        custommodal: 'Vendor_Modulename/js/custom',
    }
}

};

Создайте свой файл js в своей веб-папке:

    define([
        'jquery',
        'jquery/ui',
        'Magento_Ui/js/modal/modal'
    ],
        function($){
            $.widget('custommodel', $.mage.modal, {
                _close: function () {
                    /*write your custom code here */   
                    console.log('hello world');
                    /* below function is used for call parent function */
                    this._super();
                }
            });
         return $.custommodel;
        }
    );

Вызовите этот файл js в свой файл phtml:

require(
    [
        'jquery',
        'custommodal'
    ],
    function(
        $,
        custommodal
    ) {
        var options = {
            type: 'popup',
            responsive: true,
            innerScroll: true,
            title: 'Title',
            buttons: [{
                text: $.mage.__('Proceed'),
                class: '',
                click: function () {
                    /* some stuff */
                    this.closeModal();
                }
            }]
        };
        var popup = custommodal(options,$('#popup-modal'));            
        $('#popup-modal').custommodal('openModal');
    }
);
 11
Author: Yogesh Karodiya, 2017-05-17 11:19:30

Вы можете использовать это:

$('.action-close').click(function(){
    <your code...>
});
 3
Author: Ronak Chauhan, 2017-05-17 13:07:39

Если вы хотите закрыть модель, то вам следует использовать класс closeModal() виджета модели Например:

 $('#popup-modal').modal('closeModal');

Как вы хотите выполнить некоторый код, когда всплывающее окно закроется, нажав на кнопку закрыть.

Тогда, я думаю, вы уже поступили правильно.На click() функция в /* some stuff */ Вам нужен ваш код.

 click: function () {
                        /* some stuff */
                        this.closeModal();
                    }

Также класс: "Вы можете установить свой класс кнопок Как class: '' .

Если вы хотите выполнить какой-то код, когда ваш closeModal(); это невозможно. Тогда Ты следует создать пользовательский виджет, следуя модальной модели magento по умолчанию

 3
Author: Amit Bera, 2017-08-02 07:38:55
closed: function () {
   //do the magic here
       }

Я знаю, что опаздываю, но это может помочь вам по умолчанию Поместите этот код в свой массив параметров.

 2
Author: devZ, 2019-10-08 11:55:06