javascript - 添加/重置新值时,MDC 组件不会更新 UI

标签 javascript jquery material-design material-design-lite mdc-components

我正在尝试重新初始化/重绘所有 MDC components对于表单元素,当它们的值通过 javascript 改变时,但到目前为止我的尝试还不够。有没有一种简单的方法可以通过我不知道的内置 MDC 方法来实现此目的?

我创建了一种自定义方法,使用点击时触发的 data-mdc-reload html 属性来重新加载 MDC 组件,但这并不能完全完成工作。

这是显示该问题的代码笔:https://codepen.io/oneezy/pen/XvMavP

  • 点击更新表单值按钮添加数据
  • 红色的VALUE输出表示组件已损坏/蓝色表示它可以工作
  • 单击RESET按钮将数据重置为初始状态(这也损坏了)


Javascript

    // MDC Reload Component
    function mdcReload(time = 1) {
        var components = mdc.autoInit();
        let reloadComponents = document.querySelectorAll('[data-mdc-reload]');

        for (const reloadItem of reloadComponents) {
            reloadItem.addEventListener("click", async () => {

                setTimeout(function() {
                    components.forEach((c) => c.layout && c.layout());
                }, time);

            });
        }  
    }

    // Initialize MDC Components
    mdcReload();

最佳答案

您可以使用 MDC 提供的基础适配器。 我建议您为每个组件创建一个 MDC 实例,并使用 mdc.COMPONENT.foundation_.adapter_ 中的内置方法。

这里是修改后的pen

问题是您需要调用 floatLabel(true) 让标签在设置值后 float 。

if (c.foundation_.adapter_ && c.foundation_.adapter_.floatLabel) {
  c.foundation_.adapter_.floatLabel(true);
}

此外,我将选择组件更改为

// $(MDCselect).val('Option 3');
// Instantiate the MDC select component.
const mdcSelect = mdc.select.MDCSelect.attachTo(document.querySelector('.mdc-select'));
mdcSelect.foundation_.adapter_.setValue('Option 3');

希望对你有帮助!

关于javascript - 添加/重置新值时,MDC 组件不会更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57269132/

相关文章:

javascript - React 的 setState() 是否保证每次都创建一个新的状态对象?

javascript - 定时 AJAX 请求

Angular 4 : Responsive Grid List

android - 如何制作记分卡类型的布局 CardView?

javascript - Angular : Best practices for angular $watch registration

javascript - Node.js 和浏览器中的 setTimeout/setInterval 有多准确?

Jquery UI 元素拖放位置在第一次放置时跳转

javascript - 选择包含 Youtube 嵌入内容的 HTML 类时,JQuery 选择器不起作用

android - android中的slider和seekbar有什么区别

javascript - 如何创建一个 Javascript 生成器来计算斐波那契数列?