倒计时没有加载

时间:2017-08-06 00:18:00

标签: javascript html css

免责声明:这是ISN' T HOMEWORK!

我在HTML / CSS上学习了OE / OE课程,我刚刚学习了该课程的Javascript部分。在我尝试每章的作业之前,我复制了本书引导您完成的示例问题,以便我了解自己的目标。出乎意料的是,当我在Safari中运行文件时,没有一个Javascript工作!我仔细检查以确保我复制了本书所说的所有内容,而且我做了,但它确实没有用! javascript应该具有特定日期的倒计时,它会告诉您日期之前有多长时间,但倒计时没有加载。

没有任何Javascript元素加载到页面上。我觉得它与innerHTML无法正常工作有关,但我对JS的了解还不够深入。

我非常感谢你们提供的任何指示!

完成的页面应该如下所示:LINK

但我的看起来像这样:LINK

<script type="text/javascript">

  $( function() {

    $( "#searchBox" ).autocomplete({
      source: function( request, response ) {
        $.ajax( {
          url: '@Url.Action("SearchSkies","Skies")',
          dataType: "json",
          data: {
            query: request.term
          },
          success: function (data) {
              response(data);
          }
        } );
      },
      minLength: 2,
    } );
  } );

</script> 

2 个答案:

答案 0 :(得分:2)

javascript中有两个明显的错误:

  • countDown()函数改变了对变量名称的看法:它被定义为monthDate,但后来尝试将其用作monthDay
  • copyright()函数尝试使用三个变量 - weekDaymonthDay(重复上述错误)和year。但是这些变量是在countDown()内定义的,因此超出范围且在copyright()函数内无法使用。

(如果您打开浏览器的控制台,您将能够看到有关此类错误消息。)

还有,嗯,不管这是什么:

yearLocate = dayOfWeek.indexOf("2017")
year = dayOfWeek.substr(yearLocate, 4)

那里有一些令人印象深刻的垃圾代码,就是这样。它实际上在说&#34;找到字符串的位置&#39; 2017&#39;在该日期,然后从该位置取四位数。&#34;你也可以切断中间人并说出year="2017",因为这是它唯一可行的时间。我惊呆了,任何人都会把这样的东西写成一张直面的教科书。

(在任何情况下,字符串操作都不是如何使用日期 - 它会在不同的用户区域设置中断,它们使用不同的字符串表示日期。在现实生活中,您使用日期对象,并以getFullYear()获得年份。)

所以...关于那本教科书......

你在上面提到过这个代码来自2012年的书 - 过去的五年一直都是,但是,让我们在javascript世界中说非常繁忙的一年,所以它已经过时了在最好的情况下。

但是它使用了许多过时的技术或者当时的不良练习 - 内联css,布局表(!),日期的字符串操作,以及(如评论中指出的duskwoof,因此,这个答案的总重写)取决于具有ID的DOM元素是全局窗口变量。最后一个甚至在当天都没有被广泛使用,并且使得javascript无法与HTML分开调试。使用document.getElementById()将这些变量显式定义为变量,而不是依赖它们只是在窗口对象上显示为命名变量,这是一个更好的主意。

你应该知道,你从这本书中学到的东西这些天如何完成。我不知道&#34; OE / OE课程&#34;是的,但我希望你不为此付钱(如果你是,我会要求退款。)

答案 1 :(得分:0)

请重新检查该示例是否已从教科书中正确复制。因为如果是:

<强>的JavaScript

在countDown函数中,&#34; monthDate&#34;是&#34; monhDay&#34;并应阅读:

        var monthDay = newDay.substring(0, dateLocate+1)

copyright中的部分代码已替换为countDown函数中的代码,可以替换为:

function copyright() {
    var lastModDate = document.lastModified
    lastModDate = lastModDate.substring(0,10)
    displayCopyright.innerHTML = "<p style='font-size: 12pt; font-family:helvetica;'>"
      + "The URL of this document is " + window.location
      + "<br>This document was last modified " + lastModDate + ".</p>"

<强> HTML

HTML缺少一个容器元素,其id属性值为&#34; displayCountDown&#34;在页面顶部的两个图像水平标尺之间。插入一个以使代码读取为:

<img src="hrimg-wedding-burgundy.jpg" width="750" height="5" alt="hr">
    <p id="displayCountDown"></p>
<img src="hrimg-wedding-burgundy.jpg" width="750" height="5" alt="horizontal rule">

其他

此时该示例应该有效。但是:

  • countDown中的一半变量在声明中缺少var
  • countDown中的许多变量未使用。
  • 代码假定全局变量是为具有id值的HTML元素自动创建的,最初由IE实现。目前的标准现在才同意这一点,并且使用限制脚本声明变量或函数的全局标识符,其名称与HTML元素id的名称相同。 document.getElementById是访问元素的标准替代方法,而不假设全局变量的有效性和存在性。
  • 代码使用自动分号插入来终止语句。这个的优点是subject to debate