繁体   English   中英

Javascript文件不执行

[英]Javascript file does not execute

我用JavaScript编写了一个非常简单的倒数计时器,并对其进行了硬编码,以告诉用户直到某个日期为止还剩下多少天。 然后应该将其显示在网页上。

这是JavaScript:

var message, days;
if (new Date().getMonth() === 6) {
    days = 34 - new Date().getDate();
    message = "Coming in " + days + " days";
} else if (new Date().getMonth() === 7) {
    if (new Date().getDate() > 2) {
        message = "Almost there!";
    } else if (new Date().getDate() === 2) {
        message = "Coming in 1 day";
    } else {
        days = 3 - new Date().getDate();
        message = "Coming in " + days + " days";
    }
} else {
    message = "Coming soon";
}
document.getElementById("coming_soon").innerHTML = message;

这是HTML:

<span id="coming_soon"></span>

问题是,如果我内联 JavaScript,它可以完美运行并显示倒计时。 但是,如果我将其作为单独的 .js文件包含在内,则不会显示倒计时。

如何将其作为单独的文件包括在内,仍然运行并显示倒计时?

我是JavaScript的完整入门者,介于HTML中级和初学者之间。

提前致谢。

浏览器的错误控制台中是否有任何消息? 确保要尝试修改的<span>元素之后包含脚本,或者使用<script>元素上的defer属性 否则, getElementById()将找不到它。

应该这样做:

没有jQuery,也适用于较旧的IE

var eventPrefix = "";
if (typeof window.addEventListener === "undefined" && window.attachEvent) {
    eventPrefix = "on";
    window.addEventListener = window.attachEvent;
}

if (typeof window.addEventListener !== "undefined") {
    window.addEventListener(eventPrefix + 'load',  function() {
        var message, days;
        if (new Date().getMonth() === 6) {
            days = 34 - new Date().getDate();
            message = "Coming in " + days + " days";
        } else if (new Date().getMonth() === 7) {
            if (new Date().getDate() > 2) {
                message = "Almost there!";
            } else if (new Date().getDate() === 2) {
                message = "Coming in 1 day";
            } else {
                days = 3 - new Date().getDate();
                message = "Coming in " + days + " days";
            }
        } else {
            message = "Coming soon";
        }
        document.getElementById("coming_soon").innerHTML = message;
    });
}




预览: http//jsfiddle.net/4JPCP/1/show/

优化的代码: http : //jsfiddle.net/4JPCP/3/

编辑:
在这种情况下,IIFE是多余的,因为OP的代码不是自身包含在函数中。 但是,如果有人想深入探讨该论点,我可以将答案留在这里。


您可能还想探索通常称为立即调用函数表达式(IIFE)的内容

有关更多信息,请参见Bel Alman网站:
http://benalman.com/news/2010/11/immediately-invoked-function-expression/

基本上,通过使用以下语法包装代码,您就是在告诉浏览器立即执行您的功能,这可以解决问题:

(function(){ 
  /* your code */ 
})();

请使用以下代码查看该工作的Plunker: http ://plnkr.co/edit/cPObPCqVhavvWLtQbldd?p=preview

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM