HTML5中script标签type属性是否废弃?为何input有新type值
解答你的疑问:Script的Type属性 vs Input的Type属性
首先得明确一个关键的点:<script>的type属性和<input>的type属性是完全独立的两个东西,只是恰好同名而已,HTML规范对它们的定义和处理逻辑完全分开,这也是你困惑的核心原因。
1. 为什么<script>的type="text/javascript"被废弃?
在HTML5之前,type属性是用来指定脚本的MIME类型的,比如早期还支持text/vbscript这类非JS脚本。但HTML5规范里,JavaScript是<script>元素的默认脚本语言,所以你完全不需要再写type="text/javascript",浏览器会自动识别并执行JavaScript代码。
那你说去掉这个属性后代码无法运行,大概率不是type属性的问题,可能的原因有这些:
- 浏览器可能被设置成了兼容旧文档模式(比如IE的怪异模式),可以检查开发者工具里的文档模式,确保是HTML5标准模式。
- 代码里的变量
x没有用var/let/const声明,虽然这不会直接导致代码无法运行,但在严格模式下会报错,建议加上声明规范代码。 - 有没有隐性语法错误?打开浏览器控制台(F12)查看报错信息,这是排查脚本问题的最快方式。
2. 为什么HTML5给<input>新增了很多type值?
<input>的type属性是用来定义输入控件的类型、行为和原生UI的,比如type="email"会自动做邮箱格式校验,type="date"会弹出系统原生日期选择器。HTML5的核心目标之一就是增强原生表单能力,减少对JavaScript的依赖,所以扩展<input>的type枚举值是很合理的设计——这和<script>的type属性废弃完全是两个独立的规范更新,互不影响。
针对你的代码的优化建议
去掉<script>的type属性后,修正变量声明,代码应该可以正常运行:
<!DOCTYPE html> <html> <head> <script> function showResult() { let x = document.forms["myform"]["newinput"].value; document.forms["myform"]["result"].value = x; } </script> </head> <body> <form action="/cgi-bin/html5.cgi" method="get" name="myform"> Enter a value : <input type="text" name="newinput" /> <input type="button" value="Result" onclick="showResult();" /> <output name="result"></output> </form> </body> </html>
如果还是无法运行,一定要打开浏览器控制台看具体的错误提示,这能快速定位问题所在。
内容的提问来源于stack exchange,提问作者Usernamehere
相关产品推荐
相关产品推荐

