如何使用Flowbite库解析指定DOM元素以解决动态生成按钮无法触发模态框的问题
我正在开发一个CRUD网站,部署在托管服务器上,前端使用HTML、Tailwind CSS、Flowbite CSS/JS、原生JS和jQuery。界面里有两个基于Flowbite的模态框,ID分别是modal-customer和modal-edit,它们在DOM加载完成时就存在于主HTML文件中,所以Flowbite能正常初始化它们。
首先,modal-customer是通过带有data-target-*和data-toggle-*属性的按钮打开的,这完全符合官方文档的要求。modal-customer里面有一个表格,会通过AJAX从后端获取数据动态生成行。表格最后一列是编辑按钮,同样带有data-target-*和data-toggle-*属性,但因为这些按钮是DOM加载完成后才动态添加的,Flowbite初始化时没解析到它们,所以点击这些按钮无法打开modal-edit模态框。
我尝试过用window.initFlowbite()重新初始化Flowbite,这确实让编辑按钮能正常工作了,但它会重新初始化所有元素,导致modal-customer会被打开两次:一次是原本UI触发的实例,另一次是window.initFlowbite()执行后触发的。
我还试过手动处理编辑按钮的点击事件:
if (event.target && event.target.closest('.service_edit')) { const modal = FlowbiteInstances.getInstance('Modal', 'modal-edit'); modal.show(); }
这种方法能正常打开模态框,但Flowbite会不断在控制台输出错误信息:
Modal with id modal-edit has not been initialized. Please initialize it using the data-modal-target attribute.
我希望能找到合适的解决办法。我想过用第二种手动处理点击的方式,同时在HTML里加一个隐藏的带有data-target-*和data-toggle-*属性的元素关联modal-edit,让Flowbite能识别到它,从而不再输出控制台错误,但这感觉是个不太优雅的解决方案。有没有办法让Flowbite只解析指定的DOM元素,而不是用window.initFlowbite()重新解析所有内容呢?
备注:内容来源于stack exchange,提问作者Carmen

