跳到主要内容

n8n Form(表单)节点

使用 n8n Form 节点创建面向用户的多步骤表单。可在页面之间添加带自定义逻辑的其他节点来处理用户输入。工作流必须以 n8n Form Trigger 节点开始。

设置节点 ​

使用查询参数设置默认值 ​

可在 n8n Form Trigger 节点提供的初始 URL 中使用查询参数,设置字段初始值。表单每一页都会收到发送到该触发器 URL 的相同查询参数。

信息

仅适用于生产模式

查询参数仅在生产模式下的表单中生效,测试模式不会根据查询参数填充字段值。

使用查询参数时,对包含特殊字符的字段名或值进行百分号编码,确保 n8n 正确使用初始值。可使用 URL Encode/Decode 等工具完成编码。

例如,假设表单具有以下属性:

  • 生产 URL:https://my-account.n8n.cloud/form/my-form
  • 字段:
    • name: Jane Doe
    • email: jane.doe@example.com

使用查询参数和百分号编码,可通过以下 URL 将字段初始值设为上述数据:

https://my-account.n8n.cloud/form/my-form?email=jane.doe%40example.com&name=Jane%20Doe

这里,百分号编码将 @ 符号(@)替换为 %40,将空格( )替换为 %20。无论这些字段位于表单的哪一页,都会设置对应初始值。

显示自定义 HTML ​

向表单添加 Custom HTML(自定义 HTML)字段,即可显示自定义内容。该字段提供 HTML 输入框,可插入任意 HTML 代码,作为表单页面的一部分显示。

可通过 HTML 字段添加链接、图片、视频等丰富页面。n8n 会将这些内容与其他表单字段一起,按正常文档流呈现。

自定义 HTML 内容为只读,因此默认不包含在表单输出数据中。要将原始 HTML 包含在节点输出中,在 Element Name(元素名称)字段中为该数据指定名称。

HTML 字段不支持 <script>、<style> 或 <input> 元素。

如果页面类型为 Form Ending(表单结束),将 On n8n Form Submission(提交 n8n 表单时)设为 Show Text(显示文本),即可完全自定义最终页面,包括使用 <script>、<style> 和 <input> 元素。

添加隐藏字段 ​

可以在表单中添加字段但不向用户显示,用于传递无需用户交互输入的额外数据。

使用 Hidden Field(隐藏字段)表单元素,定义 Field Name(字段名称),并可通过 Field Value(字段值)设置默认值。

提供表单时,可通过查询参数传入隐藏字段的值。

使用 JSON 定义表单 ​

选择 Define Form(定义表单)> Using JSON(使用 JSON),以 JSON 对象数组定义表单字段。每个对象通过以下键的组合定义一个字段:

  • fieldLabel:呈现后的表单中,显示在输入框上方的标签。
  • fieldName:Form 节点输出中使用的字段名称,也用于在表达式中引用该字段。
  • fieldType:可选 checkbox、date、dropdown、email、file、hiddenField、html、number、password、radio、text 或 textarea。
    • 使用 date 添加日期选择器。日期格式的更多信息,请参阅使用 Luxon 处理日期和时间。
    • 使用 dropdown 时,通过 fieldOptions 设置选项,参见下方示例。默认单选;要允许多选,将 multiselect 设为 true。也可使用 checkbox 或 radio,并配合 fieldOptions 设置选项。
    • 使用 file 时,将 multipleFiles 设为 true 可允许选择多个文件。将 acceptFileTypes 设为以逗号分隔的扩展名字符串,可限定允许的文件类型,参见下方示例。
    • 使用 hiddenField 添加隐藏字段,详见添加隐藏字段。
    • 使用 html 显示自定义 HTML,详见显示自定义 HTML。
  • placeholder:指定字段占位内容,适用于各类 fieldType,但不适用于 dropdown、checkbox、radio、date 和 file。
  • defaultValue:指定在表单元素中预填或预选的值,适用于各类 fieldType,但不适用于 password、html、hiddenField 和 file。
  • requiredField:要求用户填写此字段。

以下 JSON 示例展示通用格式及可用键:

// Use the "requiredField" key on any field to mark it as mandatory
// Use the "placeholder" key to specify placeholder data for all fields
// except 'dropdown', 'checkbox', 'radio', 'date' and 'file'
// Use the "defaultValue" key to pre-fill a form field or pre-select a
// value in 'checkbox', 'radio' or 'dropdown' fields

[
{
"fieldLabel": "Date Field",
"fieldType": "date",
"formatDate": "mm/dd/yyyy", // how to format received date in n8n
"requiredField": true
},
{
"fieldLabel": "Dropdown Options",
"fieldType": "dropdown",
"fieldOptions": {
"values": [
{
"option": "option 1"
},
{
"option": "option 2"
}
]
},
"defaultValue": "option 1",
"requiredField": true
},
{
"fieldLabel": "Multiselect",
"fieldType": "dropdown",
"fieldOptions": {
"values": [
{
"option": "option 1"
},
{
"option": "option 2"
}
]
},
"multiselect": true // setting to true allows multi-select
},
{
"fieldLabel": "Email",
"fieldType": "email",
"placeholder": "me@mail.com"
},
{
"fieldLabel": "File",
"fieldType": "file",
"multipleFiles": true, // setting to true allows multiple files selection
"acceptFileTypes": ".jpg, .png" // allowed file types
},
{
"fieldLabel": "Number",
"fieldType": "number"
},
{
"fieldLabel": "Password",
"fieldType": "password"
},
{
// "fieldType": "text" can be omitted since it's the default type
"fieldLabel": "Text"
},
{
"fieldLabel": "Textarea",
"fieldType": "textarea",
"defaultValue": "Lorem ipsum."
},
{
"fieldType": "html",
"elementName": "content", // Optional field. It can be used to include the html in the output.
"html": "<div>Custom element</div>"
},
{
"fieldLabel": "Checkboxes",
"fieldType": "checkbox",
"fieldOptions": {
"values": [
{
"option": "option 1"
},
{
"option": "option 2"
}
]
},
"defaultValue": ["option 1", "option 2"]
},
{
"fieldLabel": "Radio",
"fieldType": "radio",
"fieldOptions": {
"values": [
{
"option": "option 1"
},
{
"option": "option 2"
}
]
}
},
{
"fieldLabel": "hidden label",
"fieldType": "hiddenField",
"fieldValue": "extra form data"
}
]

Form Ending(表单结束) ​

使用 Form Ending(表单结束)页面类型结束表单,并显示完成页、重定向到 URL,或显示自定义 HTML 或文本。即使 n8n 执行了包含结束节点的多个分支,每次执行也只显示一个结束页面。

在 On n8n Form Submission(提交 n8n 表单时)中选择:

  • Show Completion Screen(显示完成页面):显示最终页面,确认用户已提交表单。
    • 填写 Completion Title(完成标题),设置表单上的 h1 标题。
    • Completion Message(完成消息)显示在表单主 h1 标题下方,作为副标题。使用 \n 或 <br> 换行。
    • 选择 Add option(添加选项),填写 Completion Page Title(完成页标题),设置浏览器标签页的标题。
  • Redirect to URL(重定向到 URL):表单完成后,将用户重定向到指定 URL。
    • 在 URL 字段中填写用户完成表单后要跳转的页面。
  • Show Text(显示文本):使用任意纯文本和 HTML 定义最终页面。
    • 在 Text(文本)字段中填写要显示的 HTML 或纯文本内容。
  • Return Binary File(返回二进制文件):完成后返回二进制文件。
    • 填写 Completion Title(完成标题),设置表单上的 h1 标题。
    • Completion Message(完成消息)显示在表单主 h1 标题下方,作为副标题。使用 \n 或 <br> 换行。
    • 提供包含待返回文件的 Input Data Field Name(输入数据字段名称)。

带分支的表单 ​

n8n Form 节点每次收到前置节点的数据时,都会执行并显示对应的表单页面。构建带分支的表单时,需要了解以下执行行为。

分支互斥的工作流 ​

表单的互斥分支按预期运行。n8n 根据提交的数据和所设条件执行其中一个分支,依次显示该分支的每个页面,最后到达页面类型为 Form Ending(表单结束)的 n8n Form 节点。

以下工作流演示互斥分支,每次选择只能执行一个分支。

可能执行多个分支的工作流 ​

同时向多个分支发送数据的表单需要更谨慎处理。如果多个分支在一次执行中收到数据,例如来自 Switch 节点,n8n 会按顺序执行每个有数据的分支。一个分支结束后,再执行下一个有数据的分支。

每次执行只执行一个页面类型为 Form Ending(表单结束)的 n8n Form 节点。多个分支收到数据时,除最后一个分支对应的结束节点外,n8n 会忽略其他所有结束节点。

以下工作流可能在一次执行中运行多个分支。n8n 按顺序执行所有有效分支,因此会影响哪些 n8n Form 节点实际执行,尤其是显示哪个 Form Ending(表单结束)节点:

节点选项 ​

选择 Add Option(添加选项)查看更多配置:

  • Form Title(表单标题):显示为网页标题及表单主 h1 标题。
  • Form Description(表单说明):显示为表单主 h1 标题下方的副标题,支持 HTML。使用 \n 或 <br> 换行。此说明也会填入页面的 HTML meta description。
  • Button Label(按钮标签):表单提交按钮上显示的名称。
  • Custom Form Styling(自定义表单样式):使用 CSS 覆盖公开表单界面的默认样式。字段会预先填入默认样式,便于只修改所需部分。
  • Completion Page Title(完成页标题):表单最终完成页面的标题。

运行节点 ​

构建和测试工作流 ​

构建或测试时,使用 n8n Form Trigger 节点中的 Test URL(测试 URL),便于在编辑器界面查看传入数据并调试。

有两种测试方式:

  • 选择 Execute Step(执行步骤)。n8n 打开表单,提交后运行此节点和前置节点,不运行工作流其余部分。
  • 选择 Execute Workflow(执行工作流)。n8n 打开表单,提交后运行整个工作流。

生产工作流 ​

工作流准备就绪后,切换到触发器的 Production URL(生产 URL):打开 n8n Form Trigger,在 Form URLs(表单 URL)选择器中选择 Production URL。发布工作流后,用户提交表单时 n8n 会自动运行工作流。

使用生产 URL 时,确保已保存并发布工作流。表单触发器传入的数据不会显示在编辑器界面中。

模板与示例 ​

浏览 n8n Form 节点集成模板,或搜索所有模板

本文为社区中文翻译。查看对应英文原文