Estoy tratando de crear una ventana emergente modal que no se puede cerrar. Tiene un botón que lo lleva a la página siguiente haciendo clic en él, pero no quiero que los usuarios puedan cerrarlo.
La ventana emergente modal se puede cerrar de 3 maneras:
- Al hacer clic en la cruz /
[X]botón en la esquina superior derecha - Presionando escape
- Haga clic en la superposición
Hasta ahora, este es mi JS modal y creo clickableOverlay: falseque ya he abordado el tercero:
require(
[ 'jquery', 'Magento_Ui/js/modal/modal' ],
function($, modal) {
$("#popup").modal({
autoOpen: true,
responsive: true,
clickableOverlay: false,
modalClass: 'modal-custom',
title: 'Popup',
buttons: [{
text: $.mage.__('Take me back to the homepage'),
class: 'action close-popup wide',
click: function () {
window.location.href = '/';
}
}]
});
}
);
ACTUALIZAR:
También intenté configurar el modal de una manera diferente al probar las soluciones proporcionadas:
require(
[ 'jquery', 'Magento_Ui/js/modal/modal' ],
function($, modal) {
modal({
//options
}, $("#popup"));
}
);
magento2
javascript
magento-2.1
jquery
modal
7ochem
fuente
fuente

Respuestas:
No pude obtener una anulación de la
modal.closeModal()función para que funcione a través de mixins y también creo que hacerlo a través de un mixin hace que se anule a través de todo el sitio web en todos los modales, lo que no quiero. Solo lo necesito en este modal.Terminé simplemente quitando cualquier disparador que llame
modal.closeModal(). Hay algunas otras opciones modales que puede usar para lograr eso:openedopción / evento que se activará inmediatamente después de que se haya abierto el modalkeyEventHandlers.escapeKeyopciónEntonces este es mi código final:
fuente
Creo que usar mixins en ese caso sería relevante.
Puedes probar lo siguiente:
Primero en su módulo, cree lo siguiente
view/base/requirejs-config.js:Luego crea
view/base/web/hook.js:Con este mixin, reemplaza la implementación del
closeModalmétodo con su propio método. En ese caso, devolver falso evitaría cerrar el modal.fuente
jQuery.mage.modal.closeModalme dafunction() { return false; }return false;no sea suficiente. No estoy muy a gusto con JS para ser honesto. Creo que debería leer este artículo, puede ayudarlo a reducir el problema o encontrar otra forma posible de hacerlo: alanstorm.com/the-curious-case-of-magento-2-mixinscloseModal()función en todo el sitio, que no quiero. Solo quiero aplicar esto a este modal único