实现周期性JS错误

时间:2018-05-24 07:57:18

标签: javascript jquery css materialize

我正在为我所在的公司开发一个网站,这次我选择使用Materialize CSS作为UI框架进行开发。它看起来非常好,我喜欢它的功能,虽然我有一个主要问题。 周期性错误! 这意味着,当我加载网站有时我得到一个js错误。例如,我有一个名为selectDatabase的下拉列表(这是我定义的对象)。 如果我重新加载页面几次,这不会发生!下拉列表应该初始化。你知道这里可能出现什么问题吗?

项目细节:
框架:Asp.net Core 2.0 MVC

HTML代码:



<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="HandheldFriendly" content="True">
    <meta name="MobileOptimized" content="320" />
    <!--Import Google Icon Font-->
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <!--Import materialize.css-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <link type="text/css" rel="stylesheet" href="~/lib/materialize/materialize.css" media="screen,projection" />
    <link rel="stylesheet" href="~/lib/corporationtheme/css/main.css" type="text/css" media="all" />
    <link rel="stylesheet" href="~/lib/corporationtheme/css/style_guide.css" type="text/css" media="all" />
    <link rel="stylesheet" href="~/lib/corporationtheme/css/print.css" type="text/css" media="print" />
    <link rel="stylesheet" href="~/css/font-awesome-animation.min.css" type="text/css" media="all" />
    <link rel="stylesheet" href="~/css/bundle.css" type="text/css" media="all" />
    <title>AutoTest Validation</title>
</head>
<body>
    <div class="visible-print print-logo"><i class="icon-logo"></i></div>
    <div class="content-wrapper">
        <div class="mega-menu">
            <div class="container nav-top">
                <div class="row">
                    <div class="col s12">
                        <a class="logo" href="/">
                            <i class="icon-logo"></i>
                        </a>
                        <span class="logo-text">
                            <i class="icon-logo-text"></i>
                            <i class="icon-logo-text-oneline"></i>
                        </span>
                        <a href="#" class="mobile-btn menu-btn">
                            <i class="icon-mobile-menu"></i>
                        </a>
                        <div class="logo-title">
                            <div class="userDropdownWrapper">
                                <a class="dropdown-trigger" id="userDropdown" href="#!" data-target="dropdown">
                                    <img id="userpicture" src="~/images/profile.svg" class="avatar">
                                    <span id="userfirstname"></span>
                                    <svg class="caret" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M7 10l5 5 5-5z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg>
                                </a>
                            </div>
                            <ul id="dropdown" class="dropdown-content">
                                <li><a><i class="material-icons dropdown-icon">border_color</i>Edit Profile</a></li>
                                <li><a><i class="material-icons dropdown-icon">vpn_key</i>Sign Out</a></li>
                                <li class="divider"></li>
                            </ul>
                            <div id="databaseSelectInputField" class="input-field">
                                <select id="databaseSelect">
                                    <option value="1" selected>AutoTest</option>
                                    <option value="2">AutoTest2</option>
                                </select>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="main-nav">
                <div class="container">
                    <div class="row">
                        <div class="col s12">
                            <ul>
                                <li><a href="/">DashBoard</a></li>
                            </ul>
                        </div>
                    </div>
                </div>
            </div>
            <div class="sub-nav">
                <div class="container">
                    <div class="row">
                        <div class="col s12">
                        </div>
                    </div>
                    <div class="row">
                        <div class="col s12 sub-nav-items">
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="container">
            <div class="container maincontainer" id="followMe">
                @RenderBody()
            </div>
        </div>
        <div class="footer-links">
            <ul>
                <li><a href="http://www.corporation.com">corporation.com</a></li>
                <li><a href="https://workplace.corporation.net/">Portal</a></li>
            </ul>
        </div>
    </div>
    <script>
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = '/lib/corporationtheme/js/app/main.js';
        document.body.appendChild(script);
    </script>
    <script type="text/javascript" src="~/lib/jquery/dist/jquery.min.js"></script>
    <script type="text/javascript" src="~/lib/materialize/materialize.js"></script>
    <script type="text/javascript" src="~/js/errorHandler/bundle.js"></script>
    <script type="text/javascript" src="~/js/shared/layout/bundle.js"></script>
    @RenderSection("scripts", required: false)
</body>
</html>
&#13;
&#13;
&#13;

JS代码:

&#13;
&#13;
let selectDatabase = null;
let selectUser = null;
let dropdownUser = null;
let currentUser = {};
$(document).ready(function () {
    selectDatabase = $('#databaseSelect');
    selectUser = $('#userSelect');
    dropdownUser = $("#userDropdown");
    getUserProfile();
    selectDatabase.formSelect();
    selectUser.formSelect();
    dropdownUser.dropdown();
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

Error that sometimes appear

2 个答案:

答案 0 :(得分:0)

如果不能测试一些东西很难回答这个问题,但无论如何我都会尝试:)

看起来有时Materialise js无法正确加载,或者(我认为最有可能)它在您使用函数后加载。

所以解决方案是

确保在加载Materialise js后使用代码。你可以通过几种方式完成。最简单的方法是在html中为脚本标记添加defer属性,以html中的标记顺序加载js。

示例

<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js" defer></script>
<script src="your_js.js" defer></script>

答案 1 :(得分:0)

好。所以看起来我确实发现了问题。 Main.Js正在干扰Materalize并导致错误。我为主题找到了一个更简单的main.js。现在错误消失了,网站就像一个魅力。谢谢你的帮助。