在页面加载时修改MDL元素

时间:2016-08-17 19:45:18

标签: javascript jquery material-design-lite

我正在尝试在页面加载时设置mdl滑块的值。为mdl滑块设置值的推荐方法如下 -

document.querySelector('#slider').MaterialSlider.change(value);

如果从TypeError: document.querySelector(...).MaterialSlider is undefined$(document).ready()调用,则会引发错误$(window).load()

设置一秒的超时时间可以修复问题,但看起来很糟糕。 是否还有其他事件我可以将其绑定以确保其有效?

这就是我加载脚本的方式 -

    //mobile optimized
    meta(name='viewport', content='width=device-width, initial-scale=1.0')

    //css
    link(rel='stylesheet', href='/stylesheets/style.css')

    //material-design-lite
    link(rel='stylesheet', href='/bower_components/material-design-lite/material.min.css')
    script(src='/bower_components/material-design-lite/material.min.js')
    link(rel='stylesheet', href='https://fonts.googleapis.com/icon?family=Material+Icons')

    //jQuery
    script(src='/bower_components/jquery/dist/jquery.min.js')

    //Material icon fonts
    //link(rel="stylesheet", href="https://fonts.googleapis.com/icon?family=Material+Icons")
    link(href='https://fonts.googleapis.com/css?family=Open+Sans', rel='stylesheet', type='text/css')

    //polyfill (support for dialog)
    script(src="/bower_components/dialog-polyfill/dialog-polyfill.js")
    link(rel="stylesheet", type="text/css", href="/bower_components/dialog-polyfill/dialog-polyfill.css")

3 个答案:

答案 0 :(得分:2)

我花了几个月的时间,但我终于找到了解决方案。只需添加这个 -

$( document ).ready(function() {
    componentHandler.upgradeAllRegistered();
    // --- do stuff on mdl elements here ---
});

这有一个额外的好处,就是在完全加载之前隐藏丑陋版本的mdl组件。

答案 1 :(得分:1)

根据您的错误消息,我确实同意@ e666正在关闭的问题。要检查的其他一些事项是您相对于其他脚本加载MDL的位置。 Script loading can get a bit tricky sometimes.

除此之外,如果要在服务器上动态构建HTML页面,可以考虑的其他事项是直接在DOM中设置滑块的值。

例如,滑块的HTML如下所示:

value

请注意@model MyModel <div> <p style="width:300px"> <input class="mdl-slider mdl-js-slider" type="range" id="s1" min="0" max="10" value="@Model.InitialValue" step="2"> </p> </div> 选项。您可以使用服务器端代码动态设置该值,如果这可能是您的替代方案。

如果你正在使用ASP.NET,你可能会做这样的事情。

{{1}}

但是,如果您在加载JavaScript时遇到问题,我建议您在进一步操作之前确保所有内容都已正确加载,因为它可能会在以后影响您。

答案 2 :(得分:0)

您的滑块和javascript代码的顺序是什么? 如果您首先调用您的函数,然后创建滑块,该函数将找不到它。这可能是它未定义的原因。 这也是它在等待一秒钟后工作的原因。在这一秒钟内,页面已经完全加载,并且可以找到滑块。

如果先创建滑块并在之后进行更改,则可以对其进行操作。 您可以在滑块之后使用代码块执行此操作,其中将调用更改滑块值的函数。