HTML5通过标签或事件属性直接调用JavaScript函数实现
基础调用方法
调用方式 | 代码示例 | 说明 |
内联脚本 | <script>alert("Hello HTML5!")</script> | 直接在HTML中嵌入JS代码,通常放在</body> 前 |
外部脚本 | <script src="main.js"></script> | 通过src 引入外部JS文件,需确保路径正确 |
事件属性 | <button onclick="alert('Clicked')">点我</button> | 在HTML元素上直接绑定事件处理函数 |
事件处理
事件类型 | 代码示例 | 说明 |
内联事件 | <img src="image.jpg" onload="console.log('图片加载完成')"> | 元素加载时触发事件 |
事件监听 | <script> document.getElementById('myBtn').addEventListener('click', function() { alert('按钮被点击'); });</script> | 通过addEventListener 绑定事件,支持多个回调 |
动态加载脚本
方法 | 代码示例 | 说明 |
创建<script> | <script> var script = document.createElement('script'); script.src = 'dynamic.js'; document.head.appendChild(script);</script> | 动态插入脚本,可控制加载顺序 |
异步加载 | <script> script.async = true; script.onload = function() { console.log('脚本加载完成'); };</script> | 设置async 属性实现异步加载 |
DOM操作与JS交互
操作类型 | 代码示例 | 说明 |
获取元素 | const elem = document.querySelector('.my-class'); | 通过选择器获取DOM节点 |
| document.getElementById('text').innerText = '新内容'; | 直接修改元素文本或HTML |
操作属性 | elem.style.color = 'red'; | 修改元素CSS样式或属性 |
错误处理
场景 | 代码示例 | 说明 |
语法错误 | <script> try { undefinedFunction(); } catch (e) { console.error(e); } | 使用try-catch 捕获运行时错误 |
脚本加载失败 | <script src="error.js"></script><script> document.querySelector('script').onerror = function() { alert('脚本加载失败'); };</script> | 监听onerror 事件处理加载错误 |
高级用法(HTML5特性)
特性 | 代码示例 | 说明 |
ES6模块导入 | <script type="module"> import { func } from './module.js'; func();</script> | 使用type="module" 加载模块化脚本 |
Web Storage | <script> localStorage.setItem('key', 'value'); const val = localStorage.getItem('key');</script> | 通过API操作本地存储数据 |
相关问题与解答
问题1:如何确保外部脚本加载完成后再执行代码?
解答:
- 将依赖脚本的代码放在外部脚本
<script>
标签之后。 - 使用
defer
属性让脚本异步加载并等DOM解析完成后执行。 - 通过事件监听(如
script.onload
)检测脚本加载状态。
示例: <script src="main.js" defer></script>
<script>
console.log('主脚本已加载'); // 确保在main.js之后执行
</script>
问题2:如何动态加载的脚本支持模块化(ES6)?
解答:
- 动态创建的
<script>
标签需设置type="module"
。 - 使用
importMap
或URL路径指定模块依赖。
示例: const script = document.createElement('script');
script.type = 'module';
script.src = 'dynamic-module.js';
document.head.appendChild(script);