在声明js之前,如何在js中使用HTML元素
How can I use HTML elements in js before declaring it?
我正在尝试用HTML5
画布制作一个2D游戏。所以我要做的是为js
定义画布
var canvas = document.getElementById('gamecanvas');
当我把这句话放在<canvas>
标签后面时,代码运行得很好。但是当我把脚本放在script
标签中的head
标签中时(在写<canvas>
标签之前,它会给我错误
ncaught TypeError: Cannot read property 'getContext' of null
这是因为画布在js
代码之前没有"声明",因为JS
逐行读取代码。
但是,本教程在编写canvas
标记之前已经编写了代码。这怎么可能发生。
还有一个问题,为什么JS
在声明函数之前使用函数时没有给出任何错误?它不应该是一样的吗?
但是,本教程在编写画布标记之前已经编写了代码。这怎么可能发生。
直到元素被添加到DOM之后,它才运行代码。
代码在函数中。调用该函数是为了响应load
事件。
还有一个问题,为什么JS在声明函数之前使用函数时没有给出任何错误?它不应该是一样的吗?
函数声明要进行提升(这本质上意味着它们是在编译时而不是运行时发现的)。
我知道如何解决这个问题的3个解决方案。最简单和最好的是(正如上面的人所写的)
<body onload="doSomething()">
因为html是从页面顶部到底部加载代码,所以可以预见,第一个加载的是javascript,他的函数会做什么,他们必须做什么,找到ID,但如何,当页面还没有加载时。上面的onload函数将执行您输入的函数,之后将加载整个主体。
另一种方法是将<script>
标记放在页面的末尾,这样javascript将作为最后一个加载。或者,如果你对Jquery开放,Jquery 的基本功能
$(document).ready(function(){ ... TO DO ...});
也会这么做。
在页面准备好之前,不要执行引用DOM元素的代码。页面准备好后调用函数:
<body onload="doSomething()">
函数doSomething()当然可以出现在它引用的元素之前的页面上,只要该函数只在元素在DOM中之后执行即可。
- 在向下滚动JS/HTML/CSS wordpress网站时替换徽标图像
- 将Rails后端添加到JS/HTML/CSS应用程序时,正确的文件位置是什么
- 可以't在Angular js/HTML中获取单个记录
- 如何在angular js/HTML中处理数组
- JS HTML CSS Accordion
- 当包含在CSS/JS/HTML中时,我如何得出正确的目录路径
- JS/HTML function
- 如何在JS/HTML中将函数输出发送到表单元格
- 挖空 JS html 绑定返回奇怪的代码而不是 html 字符串
- 下划线.js HTML 元素中的模板
- Knockout.js - “html”绑定中的“值”绑定
- Angular.js & HTML / 如何并排组合 2 个元素
- DevExpress (JS / HTML) 将事件附加到弹出窗口中的元素
- 将数据从 C# 传递到 angular js html
- 我如何在我的 AngularJS 中获取这个 D3.js HTML 元素,以便我可以操作它
- 强制设备方向通过 CSS/JS/HTML 横向
- 动态更新地铁列表在水平滚动时查看 (JS/HTML)
- WinJS UI JS/HTML 控件是否可以在 Metro 之外使用
- 如何使网页一次只能访问一次?(JS+HTML)
- 如何在 JS / HTML 中添加更改图像的文本