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: false
que 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:opened
opción / evento que se activará inmediatamente después de que se haya abierto el modalkeyEventHandlers.escapeKey
opció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
closeModal
método con su propio método. En ese caso, devolver falso evitaría cerrar el modal.fuente
jQuery.mage.modal.closeModal
me 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