我使用Flowbite modals向用户显示注册和登录表单。在每个modals的底部都有一个按钮可以切换到另一个,例如“不是会员?注册。”或“已经有帐户?登录。”
100d 1xx 1c 1d 1x的字符串
这些按钮触发onclick
事件到函数toggleSignInSignUpModals()
,如下所示:
function toggleSignInSignUpModals(e) {
// Hard coded these here for ease of understanding. //
var currentModalName = "authentication-modal";
var otherModalName = "sign-in-modal";
/////////////////////////////////////////////////////
var currentModalElem = document.getElementById(currentModalName);
var otherModalElem = document.getElementById(otherModalName);
const options = {
placement: 'center',
backdrop: 'dynamic',
backdropClasses:
'bg-gray-900/50 dark:bg-gray-900/80 fixed inset-0 z-40',
closable: !0,
onHide: function() {},
onShow: function() {},
onToggle: function() {}
};
var currentModalObj = new Modal(currentModalElem, options);
currentModalObj.hide();
var otherModalObj = new Modal(otherModalElem, options);
otherModalObj.show();
}
字符串
在这个函数中,我使用了内置的Flowbite函数hide()
和show()
来在2个模态之间切换。
在两个模块之间切换时,此功能正常工作。但是,在您切换并关闭它们之后,两个模块都停止运行(如下所示):
的
*注意: 在这一点上值得一提的是,当在此上下文之外使用模态时(不使用我的自定义函数),模态可以完美地工作。
作为参考,here是正在使用的Flowbite JavaScript。
hide()
函数可以在2191
行中看到,show()
函数可以在2189
行中看到,- 我认为所有的模态都是从
2106
行开始的,
我尝试过的主要内容: - 我尝试在
onclick
函数之外示例化modals,以避免每次用户在两个modals之间切换时都重新创建它们。这导致modals第二次成功打开,但随后无法正确关闭(modal overlay未被删除)。 - 我有一种预感,这与Flowbite如何创建和销毁
Modal
对象有关,也许我需要调用除了hide()
和show()
之外的其他方法。 - 隐藏时设置
isHidden = true
,显示时设置isHidden = false
。 - 在我们隐藏的模态上调用
destroy()
。 - 在我们隐藏的模态上调用
destroyAndRemoveInstance()
。 - 在我们隐藏的模态上调用
removeInstance()
。 - 在两个模态上调用
toggle()
,而不是hide()
和show()
。 - 我还怀疑这是因为事件侦听器没有使用
hide()
和show()
正确重置,但查看这两个函数显示_removeModalCloseEventListeners()
和_setupModalCloseEventListeners()
都被调用。
**TLDR;**我如何让这些modals正常工作?:)提前谢谢你。
1条答案
按热度按时间rmbxnbpk1#
我找到了一个解决方案(在Flowbite的founder的帮助下,谢谢你先生!)。
在
toggleSignInSignUpModals()
函数中:我正在创建新的Modal
对象**,除了页面上已经存在的对象**。这导致Modal
示例的show()
和hide()
函数被调用两次。更具体地说:
eventListenerInstance
,这意味着用户无法再次打开它。isHidden = false
,进一步导致这一行在函数_destroyBackdropEl()
中失败。从本质上讲,由于在每个模态上调用所有内容两次,模态状态都被顶起来了。
下面是我的(工作)代码:
字符串
这不是创建新的
Modal
示例,而是查找页面上已经存在的示例并直接处理它们。再次感谢Zoltán Szgyényi在这方面的帮助!