表单的子元素可不在form标签内
表单是网页用于向服务器发送数据的元素。其用法类似下面:
<form method="POST" action="/login">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="提交" />
</form>
form标签对及其内部的所有子元素共同组成了表单。提交表单时,浏览器会将form标签对内所有具有name属性的标签的键值提交给服务器。
令人惊奇的是,一个表单子元素可不在form标签内,但是却从属于一个表单。要让一个form标签外的表单子元素从属于某一表单,只需要将该表单子元素的form属性设置为该表单form元素的id。其用法类似下面:
<form id="login-form" method="POST" action="/login"></form>
<input form="login-form" type="text" name="username" />
<input form="login-form" type="password" name="password" />
<input form="login-form" type="submit" value="提交" />
当点击提交按钮时,浏览器会把所有从属于表单且具有name属性的标签的键值对提交给服务器,在上面这个例子里会向浏览器提交username和password键值对。需要说明的是,如果提交按钮也有name属性,那么提交按钮的值也会被提交给浏览器;如果在form标签对外有多个提交按钮,那么只有被点击的按钮的值会被提交给服务器,未被点击的按钮的值不会被提交给服务器。
“从属于表单的控件可不在form标签内”这一特性有两种妙用。
第一,将提交按钮与form标签分离,放在行内元素中。form元素是块元素,它需要单独占据一行,所以form不能位于行内元素内(虽然浏览器的容错能力很强,能容忍这种错误)。但有时确实有将提交按钮放在行内元素内的需求,例如点赞、点踩、收藏按钮等。这时可将提交按钮与form标签分离,并放在行内元素内。如下是一个示例。
<span id="evaluate-article-button">
<button form="praise-article" type="submit" name="operation" value="praise">赞</button>
<button form="criticize-article" type="submit" name="operation" value="criticize">踩</button>
<button form="collect-article" type="submit" name="operation" value="collect">收藏</button>
</span>
<div id="form">
<form id="praise-article" method="POST" action="/article/1"></form>
<form id="criticize-article" method="POST" action="/article/1"></form>
<form id="collect-article" method="POST" action="/article/1"></form>
</div>
第二,多个提交按钮共用一个form元素,减少代码量。可以发现,上例所示的form标签的内容都是相同的,所以点赞、点踩、收藏三个按钮可共用一个form元素。示例如下。
<span id="evaluate-article-button">
<button form="evaluate-article" type="submit" name="operation" value="praise">赞</button>
<button form="evaluate-article" type="submit" name="operation" value="criticize">踩</button>
<button form="evaluate-article" type="submit" name="operation" value="collect">收藏</button>
</span>
<div id="form">
<form id="evaluate-article" method="POST" action="/article/1"></form>
</div>
表单的子元素可不在form标签内的更多相关文章
- html5中form表单新增属性以及改良的input标签元素的种类
在HTML5中,表单新增了一些属性,input标签也有了更多的type类型,有些实现了js才能实现的特效,但目前有些浏览器不能全部支持.下面是一些h5在表单和input标签上的一些改动. <!D ...
- Ajax提交form表单内容和文件(jQuery.form.js)
jQuery官网是这样介绍form.js A simple way to AJAX-ify any form on your page; with file upload and progress s ...
- HTML表单之input元素的23种type类型
摘自:http://www.cnblogs.com/xiaohuochai/p/5179909.html 了解HTML表单之input元素的23种type类型 随着HTML5的出现,input元素新增 ...
- Django 11 form表单(状态保持session、form表单及注册实现)
Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...
- 如何disabled禁用所有表单input输入框元素
转载地址:https://www.zhangxinxu.com/wordpress/?p=8568 一.pointer-events:none和覆盖层方法的问题 经常会遇到需求,需要禁用div中或者f ...
- BPM不同表单之间子表的赋值
上次写的是同一个表单的子表之间赋值,这次是不同表单之间子表的赋值 首先,我们给需要赋值的表单添加一个复制按钮 $.MvcSheet.AddAction({ Action: &qu ...
- 第四篇 HTML 表单深入了解、注释和a标签的运用
表单深入了解.注释和a标签的运用 注释,HTML中的注释格式: 开头 <!-- 结束 --> 例子: <!-- <div>我被注释了</div> - ...
- jQuery编程基础精华02(属性、表单过滤器,元素的each,表单选择器,子元素过滤器(*),追加方法,节点,样式操作)
属性.表单过滤器 属性过滤选择器: $("div[id]")选取有id属性的<div> $("div[title=test]")选取title属性为 ...
- PHP表单生成器,快速生成现代化的form表单,快速上手
form-builder PHP表单生成器,快速生成现代化的form表单.包含复选框.单选框.输入框.下拉选择框等元素以及省市区三级联动.时间选择.日期选择.颜色选择.树型.文件/图片上传等功能. 详 ...
随机推荐
- SpringMVC前置复习以及扩展
SpringMVC ssm:mybatis+Spring+SpringMVC javaSE javaweb 框架 理解的DAO层和Service层 先简单来讲下Dao层,和Service层的概念: S ...
- 手写tomcat——编写一个提供servlet能力的 http服务器
点击查看代码 package com.grady.diytomcat; import com.grady.diytomcat.handler.RequestHandler; import org.do ...
- Markdown Support
Markdown 支持一览 Markdown 支持一览 身正不怕影子斜 我实在没有说过这样一句话 -- 鲁迅 古代文学史发展脉络 唐诗 宋词 元曲 冯·诺依曼结构 运算器 控制器 存储器 输入输出设备 ...
- 华南理工大学 Python第2章课后小测-2
1.(单选)下列符号中,有()个是Python的关键字.(1)if (2)lambda (3)not (4) For (5)None(6)from (7)True (8)fina ...
- 使用C#编写一个.NET分析器(一)
译者注 这是在Datadog公司任职的Kevin Gosse大佬使用C#编写.NET分析器的系列文章之一,在国内只有很少很少的人了解和研究.NET分析器,它常被用于APM(应用性能诊断).IDE.诊断 ...
- 使用J2EE 登录实例开发
我们先了解下Servlet的生命周期 Servlet部署在容器里,其生命周期由容器管理. 概括为以下几个阶段: 1)容器加载Servlet类. 当第一次有Web客户请求Servlet服务或当Web服务 ...
- 微信小程序-前后端交互
前台手机验证码登录 <view>手机号:</view> <input value="{{phone}}" bindinput="bindPh ...
- Java调用C++动态链接库——Jni
最近项目需要,将C++的算法工程编译成动态链接库,交给 Java后台当作函数库调用.就去了解了下Jni.使用起来还是比较方便的. 1. 首先编写Java的调用类.例如: public clas ...
- Netty 学习(八):新连接接入源码说明
Netty 学习(八):新连接接入源码说明 作者: Grey 原文地址: 博客园:Netty 学习(八):新连接接入源码说明 CSDN:Netty 学习(八):新连接接入源码说明 新连接的接入分为3个 ...
- POJ2533 Longest Ordered Subsequence (线性DP)
设dp[i]表示以i结尾的最长上升子序列的长度. dp[i]=max(dp[i],dp[j]+1). 1 #include <map> 2 #include <set> 3 # ...