【发布时间】:2019-11-27 14:03:06
【问题描述】:
我正在尝试在 javascript 中动态创建包含 Materialize dropdown-trigger 的 HTML 卡片。
posts.forEach(function(element) {
....
message += '<a class="dropdown-trigger btn-flat" data-target="drop1">';
message += '<i class="material-icons">more_vert</i>';
message += '</a>';
document.getElementById("post" + index).innerHTML = message;
index++;
}, this);
M.AutoInit();
HTML 菜单内容:
<ul id="drop1" class="dropdown-content">
<li><a href="#!">one</a></li>
<li><a href="#!">two</a></li>
<li><a href="#!">three</a></li>
</ul>
如果我不使用动态添加创建按钮,一切都会按预期工作。如上图通过动态添加,菜单内容的高度为0:
...尽管检查表明它的高度应该是 50px:
我也试过了:
为每个帖子添加唯一的下拉内容(触发器1打开drop1,触发器2打开drop2等)
分别初始化每个触发器。
【问题讨论】:
-
好吧,它不起作用是很自然的。当您初始化组件时,它们会查找定义其行为的类或标识符(如下拉触发器)并附加这些行为。并且您在这些组件初始化之后创建元素,因此它们没有附加行为。您需要做的是重新初始化所有组件或初始化您手动创建的组件
-
@Eldar 感谢您的回复。我不确定您是否熟悉 Materialize 库,但 M.AutoInit() 命令应该重新初始化新组件。
-
"Auto Init 允许您使用单个函数调用来初始化所有 Materialize 组件。请务必注意,您不能使用此方法传入选项。"这不应该意味着它应该在函数调用之后初始化动态添加的组件
标签: javascript dynamic dropdown materialize