免责声明:这是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>
答案 0 :(得分:2)
javascript中有两个明显的错误:
countDown()
函数改变了对变量名称的看法:它被定义为monthDate
,但后来尝试将其用作monthDay
和copyright()
函数尝试使用三个变量 - weekDay
,monthDay
(重复上述错误)和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
是访问元素的标准替代方法,而不假设全局变量的有效性和存在性。