【问题标题】:javascript working in localhost but not when hosted?javascript在localhost中工作但在托管时不工作?
【发布时间】:2015-01-22 14:34:45
【问题描述】:

我正在尝试在我的网站上实现一个简单的图像滑块,但它似乎不想工作。什么都没有发生。到目前为止,我能想到的任何事情都没有奏效,所以我想我会在这里问。这是我的代码。

window.onload = function(){
   image = document.getElementById("slideShow");
   index = 0;

   setInterval(slide, 3000);
};

function slide(){
    index++;
    if(index >= 6) {index = 0;}
    path = "images/Slideshow/image"+index+".jpeg";

    image.setAttribute("src",path);
}

【问题讨论】:

  • 控制台说什么?我的第一个猜测是脚本没有及时加载。
  • 控制台这样说。 “不推荐使用 getPreventDefault()。请改用 defaultPrevented。”
  • 你确定你的图片路径正确吗?这是一个相对路径,因此它将相对于页面 URL。如果你在你的slide() 函数中加入一个console.log("hello") 语句,它会被调用吗?
  • 我只是在你建议之后才想通,我进入控制台,它说它没有找到 .js 文件。我在页面上的 标记中输入了错误的名称。多么愚蠢的错误,很高兴我发现了它!谢谢你们的帮助。
  • 您可以删除您的问题或回答您自己的问题。但是,您应该以这两种方式之一关闭它。

标签: javascript hosting


【解决方案1】:

window.onload 相当俗气,因为似乎没有人同意 onload 的实际含义。

我会推荐你​​使用

document.addEventListener("DOMContentLoaded", function(){
    // code
});

您应该注意的另一件事是加载缓慢。如果在触发 ready 事件后加载脚本,那么您的代码将永远不会触发。

一个解决方案是包装就绪函数是一个单独的模块。

var eventReady;
(function(){
    var funcArr = [];
    eventReady = function(func){
        funcArr.push(func);
    }
    document.addEventListener("DOMContentLoaded", function(){
        for(var i=0;i<funcArr.length;i++){
            try{
                funcArr[i]();
            }
            catch(e){
                throw(e);
            }
            finally{
                continue;
            }
        };
        eventReady = function(func){
            func();
        }
    });
})();

然后像这样使用模块:

eventReady(function(){
    // code
})

【讨论】:

  • window.onload 没有什么“俗气”的。它总是在 DOMContentLoaded 之后发生,因此不清楚您建议如何切换可能会解决问题。
  • 是的,这是标准。但是浏览器实现它们的方式不同。但即使这不是问题,我也会提供额外的解决方案。如果问题确实得到解决,你应该很容易反对。你不认为它应该衡量一个错误的陈述吗?
  • 我在您的回答中没有看到任何关于它如何解决 OP 问题的解释,并且答案包含几个错误的断言。这就是投票的目的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
相关资源
最近更新 更多