- 行为
- 属性
- target
- action
- action-xhr
- 其他表单属性
- custom-validation-reporting
- 输入和字段
- 操作
- 事件
- 输入事件
- 分析触发器
- 成功/错误响应呈现
- 通过模板呈现响应的具体步骤:
- 示例:表单显示成功、错误和正在提交消息
- 通过数据绑定呈现成功响应的具体步骤
- 提交后重定向
- 自定义验证
- 报告策略
- Show First on Submit
- Show All on Submit
- As You Go
- Interact and Submit
- 验证
- 变量替换
- Polyfill
- 无效提交屏蔽和验证消息气泡
- 用户互动伪类
- <textarea> 验证
- 样式设置
- 类和 CSS 钩子
- 安全注意事项
- 抵御 XSRF
amp-form
Description
Allows you to create forms to submit input fields in an AMP document.
Required Scripts
<script async custom-element="amp-form" src="https://cdn.ampproject.org/v0/amp-form-0.1.js"></script>
示例
| 说明 | 允许创建 form 和 input 标记。 |
| 必需的脚本 | <script async custom-element="amp-form" src="https://cdn.ampproject.org/v0/amp-form-0.1.js"></script> |
| 支持的布局 | 无 |
| 示例 | 请参阅 AMP By Example 的 amp-form 示例。 |
行为
通过 amp-form 扩展组件,您可以创建表单 (<form>),以在 AMP 文档中提交输入字段。amp-form 扩展组件还提供 polyfill,用于处理浏览器中的某些缺失行为。
您必须先为 <amp-form> 扩展组件添加所需脚本,然后再创建 <form>,否则文档将无效。如果您将 input 标记用于提交输入值之外的用途(例如,不在 <form> 内的输入),则无需加载 amp-form 扩展组件。
下面是一个基本表单示例:
<form method="post"
action-xhr="https://example.com/subscribe"
target="_top">
<fieldset>
<label>
<span>Name:</span>
<input type="text"
name="name"
required>
</label>
<br>
<label>
<span>Email:</span>
<input type="email"
name="email"
required>
</label>
<br>
<input type="submit"
value="Subscribe">
</fieldset>
<div submit-success>
<template type="amp-mustache">
Subscription successful!
</template>
</div>
<div submit-error>
<template type="amp-mustache">
Subscription failed!
</template>
</div>
</form>
属性
target
用于指明提交表单后表单回应的显示位置。该值必须为 _blank 或 _top。
action
用于指定处理表单输入的服务器端点。该值必须是 https 网址(绝对网址或相对网址),且不得是指向 CDN 的链接。
- 对于
method=GET:使用此属性或action-xhr。 - 对于
method=POST:使用action-xhr属性。
target 和 action 属性仅用于非 xhr GET 请求。AMP runtime 会使用 action-xhr 发出请求,并会忽略 action 和 target。如果未提供 action-xhr,则 AMP 会向 action 端点发出 GET 请求,并使用 target 打开新窗口(如果 target 值为 _blank)。如果 amp-form 扩展组件加载失败,AMP runtime 可能还会回退为使用 action 和 target。 action-xhr
用于指定通过 XMLHttpRequest (XHR) 处理表单输入和提交表单的服务器端点。XHR 请求(有时称为 AJAX 请求)是指浏览器无需完全加载页面或打开新页面即可发出的请求。浏览器会使用 Fetch API(如果有)在后台发送请求,而旧版浏览器则会回退为使用 XMLHttpRequest API。
对于 method=POST,此属性是必需项,而对于 method=GET,此属性是可选项。
action-xhr 与 action 的值可以是相同的端点,也可以是不同的端点,且需要遵守上述 action 要求。
如需了解如何在成功提交表单后重定向用户,请参阅下面的提交后重定向部分。
其他表单属性
所有其他表单属性都是可选的。
custom-validation-reporting
这是一个可选属性,可用于启用和选择自定义验证报告策略。有效值包括:show-first-on-submit、show-all-on-submit 或 as-you-go。
如需了解更多详情,请参阅自定义验证部分。
输入和字段
支持的内容:
- 其他与表单相关的元素,包括:
<textarea>、<select>、<option>、<fieldset>、<label>、<input type=text>、<input type=submit>等等。 <form method=POST action-xhr>中的<input type=password>和<input type=file>。amp-selector
不支持的内容:
<input type=button>、<input type=image>- 输入时大部分与表单相关的属性,包括:
form、formaction、formtarget、formmethod等等。
(将来我们可能会重新考虑放松上述部分规则 - 如果您需要这些规则,请告知我们并提供相关用例)。
如需详细了解有效输入和字段,请参阅 AMP 验证工具规范中的 amp-form 规则。
操作
amp-form 提供了以下操作:
| 操作 | 说明 |
|---|---|
submit |
允许您针对特定操作(例如,点按链接,或更改输入时提交表单)触发表单提交。 |
clear |
清空表单里每个输入中的值。这样一来,用户可以再次快速填写表单。 |
事件
amp-form 提供了以下事件:
| 事件 | 触发时间 |
|---|---|
submit |
在表单已提交且提交完成之前。 |
submit-success |
在表单提交已完成且响应成功时。 |
submit-error |
在表单提交已完成且响应错误时。 |
verify |
在发起异步验证时。 |
verify-error |
在异步验证已完成且响应错误时。 |
valid |
在表单验证状态更改为“有效”时(根据其报告策略)。 |
invalid |
在表单验证状态更改为“无效”时(根据其报告策略)。 |
您可以通过 on 属性使用这些事件。
例如,以下代码会监听 submit-success 和 submit-error 事件,并显示不同的灯箱,具体取决于对应的事件:
<form ...="" on="submit-success:success-lightbox;submit-error:error-lightbox">
</form>
如需查看完整示例,请点击此处。
输入事件
AMP 针对子 <input> 元素提供 change 和 input-debounced 事件。这样一来,输入值发生更改时,您可以使用 on 属性针对任何元素执行操作。
我们以一个常见用例为例,在输入发生更改时提交表单(通过选择单选按钮来回复意见调查、从 select 输入中选择一种语言来翻译网页,等等)。
<form id="myform"
method="post"
action-xhr="https://example.com/myform"
target="_blank">
<fieldset>
<label>
<input name="answer1"
value="Value 1"
type="radio"
on="change:myform.submit">Value 1
</label>
<label>
<input name="answer1"
value="Value 2"
type="radio"
on="change:myform.submit">Value 2
</label>
</fieldset>
</form>
如需查看完整示例,请点击此处。
分析触发器
amp-form 扩展组件会触发以下事件,您可以在 amp-analytics 配置中跟踪这些事件:
| 事件 | 触发时间 |
|---|---|
amp-form-submit |
在发起表单请求时。 |
amp-form-submit-success |
在收到成功响应(即响应状态为 2XX)时。 |
amp-form-submit-error |
在收到失败响应(即响应状态不为 2XX)时。 |
您可以对分析进行配置,以发送这些事件,如下例所示:
<amp-analytics>
<script type="application/json">
{
"requests": {
"event": "https://www.example.com/analytics/event?eid=${eventId}",
"searchEvent": "https://www.example.com/analytics/search?formId=${formId}&query=${formFields[query]}"
},
"triggers": {
"formSubmit": {
"on": "amp-form-submit",
"request": "searchEvent"
},
"formSubmitSuccess": {
"on": "amp-form-submit-success",
"request": "event",
"vars": {
"eventId": "form-submit-success"
}
},
"formSubmitError": {
"on": "amp-form-submit-error",
"request": "event",
"vars": {
"eventId": "form-submit-error"
}
}
}
}
</script>
</amp-analytics