ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

freeCodeCamp 课程精讲:为 HTML 表单添加提交按钮(Add a Submit Button to a Form)

freeCodeCamp 课程精讲:为 HTML 表单添加提交按钮(Add a Submit Button to a Form) freeCodeCamp 课程精讲为 HTML 表单添加提交按钮Add a Submit Button to a Form【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp在表单类网页中最关键的一步就是让用户能真正把填写好的数据“发出去”。freeCodeCamp 的「Responsive Web Design」认证路径中basic-html-and-html5这一个 block 里专门设计了一课Add a Submit Button to a Form为表单添加提交按钮用最小可运行的 CatPhotoApp 示例教你完成从“可输入”到“可提交”的闭环。读完本文你将完整掌握button typesubmit的语义与放置规则、action属性与表单提交的关系以及自由代码训练营如何用自动化测试逐条验证你的 HTML 结构并能在自己的页面中直接复用这套写法。该课程的源文件位于仓库 bad87fee1348bd9aedd08830.md它同时也是 freeCodeCamp 课程仓库的“一等公民”——每一行描述、提示与测试代码都真实驱动着线上课程的判题逻辑。课程在 freeCodeCamp 课程体系中的位置在正式动手前先弄清这节课在整条学习路径里扮演什么角色。从 basic-html-and-html5.json 的challengeOrder可以看出这个 block 按顺序编排了大量 HTML 基础挑战其中与表单直接相关的三课紧密衔接顺序标题完成目标前一课Create a Form Element用form包裹输入框并指定action本课Add a Submit Button to a Form在 form 末尾加入提交按钮让表单真正可提交后一课Use HTML5 to Require a Field用required做必填校验把表单补完整也就是说你已经知道了“如何把输入框装进 form 并指定提交地址”本课解决的是“用户点哪个按钮把数据送出去”。而下一课则负责在数据发送前做客户端校验。值得注意的是这个 block 的blockLayout被标记为legacy-challenge-list属于需要逐题按顺序完成的经典 HTML/CSS 挑战模块。该挑战文件头部声明了challengeType: 0对照 challenge-types.ts 中的常量定义0代表html类型——课程平台会据此选择classic视图渲染挑战并使用tests类型的提交逻辑即通过--hints--中的测试脚本判题而不是像项目类挑战那样提交网址。表单提交的核心机制action 定位去向submit 按钮触发动作纯 HTML 就足以构造一个能向服务器真正提交数据的表单。挑战描述开门见山点出了两条关键事实点击提交按钮会把表单里的数据发送到URL you specified with your formsactionattribute也就是form元素action属性所指向的地址声明一个提交按钮的最小写法是button typesubmitthis button submits the form/button这里需要理解两个彼此协作的部件form action...定义“数据发往哪里”。action缺失时浏览器默认把数据提交回当前页面 URLtypesubmit的按钮定义“用户用什么动作触发发送”。当用户在表单内点击提交按钮浏览器会把已命名的表单控件如带name属性的input整理成键值对并按照method默认GET打包发往action指定的地址。在上一课 Create a Form Element 中CatPhotoApp 的表单已经被写成了form actionhttps://www.freecatphotoapp.com/submit-cat-photo input typetext placeholdercat photo URL /form也就是说action已经指向了免费的测试接收端点https://www.freecatphotoapp.com/submit-cat-photo万事俱备只差一个能触发提交的按钮。任务要求与实现步骤挑战指令--instructions--只有一句话却包含三个必须同时满足的约束Add a button as the last element of yourformelement with a type ofsubmit, andSubmitas its text. 在form元素的最后一个位置添加一个按钮type为submit按钮文本为Submit。逐字拆解这三个约束位置按钮必须是form内部的最后一个元素last element即放在input之后、/form之前类型通过属性typesubmit声明它是一个提交按钮而不是普通按钮typebutton或重置按钮typereset文本按钮可见文字为Submit区分大小写不敏感但内容需与判题规则一致。本课给出的起点代码--seed-contents--是一个结构完整的 CatPhotoApp 页面包含标题、正文、无序列表、有序列表以及待改造的表单h2CatPhotoApp/h2 main pClick here to view more a href#cat photos/a./p a href#img srchttps://cdn.freecodecamp.org/curriculum/cat-photo-app/relaxing-cat.jpg altA cute orange cat lying on its back./a pThings cats love:/p ul licatnip/li lilaser pointers/li lilasagna/li /ul pTop 3 things cats hate:/p ol liflea treatment/li lithunder/li liother cats/li /ol form actionhttps://www.freecatphotoapp.com/submit-cat-photo input typetext placeholdercat photo URL /form /main你只需要在input与/form之间插入提交按钮即可其余页面内容一律不要改动。挑战官方给出的完整参考解--solutions--部分如下h2CatPhotoApp/h2 main pClick here to view more a href#cat photos/a./p a href#img srchttps://cdn.freecodecamp.org/curriculum/cat-photo-app/relaxing-cat.jpg altA cute orange cat lying on its back./a pThings cats love:/p ul licatnip/li lilaser pointers/li lilasagna/li /ul pTop 3 things cats hate:/p ol liflea treatment/li lithunder/li liother cats/li /ol form actionhttps://www.freecatphotoapp.com/submit-cat-photo input typetext placeholdercat photo URL button typesubmitSubmit/button /form /main对比 seed 与 solution唯一差异正是那句经典追加button typesubmitSubmit/button。动手实践时可以直接点击课程界面右侧的“Run the Tests”运行判题也可以把它保存为本地 HTML 文件用浏览器打开——点击按钮后浏览器会带着catphotoURL之类的查询串跳向action地址直观验证“按钮确实把表单数据提交了出去”。逐条解读自动判题四个 hints 究竟在检查什么这份挑战最有“含金量”的部分是--hints--中四条 JavaScript 断言。它们共同保证你的按钮在结构、属性、文本、标签闭合四个维度上都严格合规。读懂它们也就读懂了这道题的全部验收标准。Hint 1form 内部确实存在 buttonconst form document.querySelector(form); const children form.querySelectorAll(:scope ${button}); assert.isNotEmpty(children);取到页面中唯一的form再用form.querySelectorAll(:scope button)在其内部后代范围查找所有button断言结果非空。这条测试把按钮错误地放在 form 之外的情形直接拦下——按钮必须嵌套在 form 内否则它不会被识别为触发该表单提交的控件。Hint 2type 属性必须等于 submitassert.strictEqual(document.querySelector(button).getAttribute(type), submit);检查页面第一个button的type属性严格等于字符串submit。注意 HTML 中按钮若省略type默认值其实是submit但本挑战要求显式写出typesubmit因为显式声明是更规范、可读性更好的做法也让typebutton不触发提交的普通按钮这类写法被正确排除。Hint 3按钮文本只能为 Submitconst text document.querySelector(button).textContent; assert.match(text,/^\s*submit\s*$/gi);读取按钮的textContent用正则/^\s*submit\s*$/gi匹配^与$限定全文、\s*容忍首尾空白、i忽略大小写。描述示例里this button submits the form这种文案只能当作教学示意判题只接受纯文本Submit。这条约束训练的是 HTML 中最常见的一类 bug——按钮文案与实际意图不符。Hint 4button 必须成对闭合assert.match(code,/\/button/g); assert.match(code,/button/g); assert.strictEqual(code.match(/\/button/g).length,code.match(/button/g).length);分别统计源码里button与/button的出现次数要求两者都存在且数量相等。这是经典的“标签配对”校验把漏写闭合标签/button、或者多写了无主闭合标签的写法挡在门外强制形成编写自闭合良好 HTML 的习惯。四条 hint 分别从“位置嵌套、类型语义、文案内容、标签闭合”四个维度锁死了解法这也是课程仓库把判题与题目说明同文件存放的设计初衷学习者在 bad87fee1348bd9aedd08830.md 这一个文件里就能同时读到题目、示例、判题规则与标准答案。从文件结构理解一份课程挑战是如何被“编排”的如果你好奇这套开源课程体系是如何把.md文本变成线上交互挑战的本文件本身就是最好的标本。它由 YAML frontmatter 与多个# --section--段落组成frontmatter记录id全局唯一、title、challengeType: 0、dashedName、forumTopicId等元数据。其中challengeType在 challenge-schema.js 中被 Joi 校验为0~33的整数取值含义集中在 challenge-types.ts# --description--供学习者阅读的知识讲解与代码示例# --instructions--本关的具体任务描述# --hints--逐条判题脚本每条附带对用户的自然语言说明# --seed--/## --seed-contents--编辑器中的初始代码# --solutions--官方参考实现用于学习者对照。而 block 内各挑战的先后顺序并不由文件名字决定而是由 basic-html-and-html5.json 中challengeOrder数组显式指定——这也是为什么本文件叫bad87fee1348bd9aedd08830.md以id命名而课程展示顺序却由 JSON 统一编排。延伸实战让这个表单真正完整把提交按钮补上只是表单三件套的第一步。紧随其后的 Use HTML5 to Require a Field 继续教你用required属性做必填约束其核心写法是给input加上布尔属性requiredinput typetext required placeholdercat photo URL加上required后浏览器会在你提交空表单时拦截请求并弹出“请填写此字段”的提示——这正是 HTML5 原生表单校验constraint validation的威力无需任何 JavaScript提交前必填检查由浏览器完成。它在 bad87fee1348bd9aedc08830.md 的 solution 中与action、placeholder、typesubmit并存组合成一段极简但功能完整的“必填提交”示例form actionhttps://www.freecatphotoapp.com/submit-cat-photo input typetext required placeholdercat photo URL button typesubmitSubmit/button /form顺着这条支线继续你还会在这个 block 中遇到name与value属性决定提交的数据键值、radio/checkbox 分组等话题——它们都建立在“按钮能把表单发出去”这个本课打下的地基之上。小结本课必须带走的五个知识点表单数据的“发送目的地”由form action...决定“发送动作”由typesubmit的按钮触发提交按钮必须作为form内部的元素存在本挑战要求放在表单的最后一个位置规范写法是显式声明button typesubmitSubmit/button文本需与界面意图一致判题系统通过 DOM 断言嵌套关系、type属性、文本内容与源码正则标签配对双轨验证答案四个 hint 缺一不可表单体验的完整闭环还需要required等 HTML5 校验能力配合它们组成了 CatPhotoApp 这一系列挑战循序渐进的教学脉络。当你把button typesubmitSubmit/button写进 CatPhotoApp 的form里并通过全部四条测试时你就已经掌握了原生 HTML 表单从“收集数据”到“提交数据”的完整链路——这门手艺在纯静态页面、前后端分离表单乃至任何 Web 开发工作中都是最基础的起点。若想继续深挖这份开源课程的完整知识图谱可以直接在仓库的 curriculum/challenges/english/blocks/basic-html-and-html5 目录下按顺序阅读同 block 的其余挑战文件或查看 structure/blocks 中的编排 JSON理解整套课程是如何组织与驱动的。【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表