输入 / 表单元素 React 组件
表单元素允许你创建灵活且精美的表单布局。表单元素只是知名的 列表视图(列表 和 列表项 React 组件),但增加了一些额外的组件。
查看 Framework7 的 输入 / 表单元素 以了解它们的外观。
输入组件
以下组件包括
ListInput
- 列表项输入元素Input
- 输入元素
输入属性
属性 | 类型 | 默认 | 描述 |
---|---|---|---|
<ListInput> 属性 | |||
媒体 | 字符串 | 列表项媒体图像 URL | |
标签 | 字符串 | 输入的标签文本 | |
浮动标签 | 布尔值 | false | 启用浮动文本标签 |
outline | 布尔值 | false | 设置输入轮廓 |
input | 布尔值 | true | 是否应渲染输入元素。若想在里面使用自定义输入,请禁用此项。 |
type | 字符串 | 输入类型。所有默认 HTML5 输入类型和几个特殊类型 | |
resizable | 布尔值 | false | 使文本区域可调整大小 |
inputStyle | object | 如果需要传递额外样式,则为输入的“style”属性的值 | |
clearButton | 布尔值 | false | 添加输入清除按钮,该按钮单击时将清除输入值 |
validate | 布尔值 | false | 启用后,将根据已通过的“pattern”或输入类型对输入值进行验证。如果您使用自定义验证并且需要更好地控制显示/隐藏错误消息的位置,则最好禁用验证并同时使用道具error-message 和 error-message-force 。 |
validateOnBlur | 布尔值 | false | 启用后,仅在失去焦点时才对输入进行验证。 |
onValidate | function | 在输入验证时执行的回调,返回布尔值以指示输入是否有效。
| |
errorMessage | 字符串 | 当输入值无效时显示的自定义错误消息 | |
errorMessageForce | 布尔值 | false | 强制显示错误消息。如果您使用自定义验证并想在需要时显示/隐藏错误消息,则此项非常有用 |
info | 字符串 | 关于输入信息的自定义附加文本 | |
name | 字符串 | 输入名称 | |
placeholder | 字符串 | 输入占位符 | |
id | 字符串 | 包装元素 ID 属性 | |
inputId | 字符串 | 输入元素 ID 属性 | |
value | 字符串 number | 输入值。 如果 如果 如果 | |
defaultValue | 字符串 number | 对于不受控组件,输入的值 | |
inputmode | 字符串 | 输入原生“inputmode”属性的值 | |
size | 字符串 number | 输入原生“size”属性的值 | |
pattern | 字符串 | 输入原生“pattern”属性的值 | |
accept | 字符串 number | 输入原生“accept”属性的值 | |
autocomplete | 字符串 | 输入原生“autocomplete”属性的值 | |
autofocus | 布尔值 | false | 输入原生“autofocus”属性的值 |
autosave | 字符串 | 输入控件原生“autosave”属性值 | |
disabled | 布尔值 | false | 标记输入控件为禁用状态 |
max | 字符串 number | 输入控件原生“max”属性值 | |
min | 字符串 number | 输入控件原生“min”属性值 | |
step | 字符串 number | 输入控件原生“step”属性值 | |
maxlength | 字符串 number | 输入控件原生“maxlength”属性值 | |
minlength | 字符串 number | 输入控件原生“minlength”属性值 | |
multiple | 布尔值 | false | 输入控件原生“multiple”属性值 |
readonly | 布尔值 | false | 标记输入控件为只读状态 |
required | 布尔值 | false | 标记输入控件为必填项 |
tabindex | 字符串 number | 输入控件原生“tabindex”属性值 | |
noStoreData | 布尔值 | false | 配合 表单存储 忽略存储输入控件值 |
ignoreStoreData | 布尔值 | false | 与上述属性相同 |
wrap | 布尔值 | true | 启用后,将会包裹在 <li> |
calendarParams | object | 当 type="datepicker" 时,包含 日历参数 的对象 | |
colorPickerParams | object | 当 type="colorpicker" 时,包含 颜色选择器参数 的对象 | |
textEditorParams | object | 当 type="texteditor" 时,包含 文本编辑器参数 的对象 | |
<Input> 属性 | |||
outline | 布尔值 | false | 设置输入轮廓 |
wrap | 布尔值 | true | 定义输入控件是否用 <div class="input"> 元素包装 |
type | 字符串 | 输入类型。所有默认 HTML5 输入类型和几个特殊类型 | |
resizable | 布尔值 | false | 使文本区域可调整大小 |
inputStyle | object | 如果需要传递额外样式,则为输入的“style”属性的值 | |
clearButton | 布尔值 | false | 添加输入清除按钮,该按钮单击时将清除输入值 |
validate | 布尔值 | false | 启用后,将根据已通过的“pattern”或输入类型对输入值进行验证。如果您使用自定义验证并且需要更好地控制显示/隐藏错误消息的位置,则最好禁用验证并同时使用道具error-message 和 error-message-force 。 |
validateOnBlur | 布尔值 | false | 启用后,仅在失去焦点时才对输入进行验证。 |
onValidate | function | 在输入验证时执行的回调,返回布尔值以指示输入是否有效。
| |
errorMessage | 字符串 | 当输入值无效时显示的自定义错误消息 | |
errorMessageForce | 布尔值 | false | 强制显示错误消息。如果您使用自定义验证并想在需要时显示/隐藏错误消息,则此项非常有用 |
info | 字符串 | 关于输入信息的自定义附加文本 | |
name | 字符串 | 输入名称 | |
placeholder | 字符串 | 输入占位符 | |
id | 字符串 | 包装元素 ID 属性 | |
inputId | 字符串 | 输入元素 ID 属性 | |
value | 字符串 number | 输入值。 如果 如果 如果 | |
defaultValue | 字符串 number | 对于不受控组件,输入的值 | |
inputmode | 字符串 | 输入原生“inputmode”属性的值 | |
size | 字符串 number | 输入原生“size”属性的值 | |
pattern | 字符串 | 输入原生“pattern”属性的值 | |
accept | 字符串 number | 输入原生“accept”属性的值 | |
autocomplete | 字符串 | 输入原生“autocomplete”属性的值 | |
autofocus | 布尔值 | false | 输入原生“autofocus”属性的值 |
autosave | 字符串 | 输入控件原生“autosave”属性值 | |
checked | 布尔值 | false | 标记输入控件为已选中 |
disabled | 布尔值 | false | 标记输入控件为禁用状态 |
max | 字符串 number | 输入控件原生“max”属性值 | |
min | 字符串 number | 输入控件原生“min”属性值 | |
step | 字符串 number | 输入控件原生“step”属性值 | |
maxlength | 字符串 number | 输入控件原生“maxlength”属性值 | |
minlength | 字符串 number | 输入控件原生“minlength”属性值 | |
multiple | 布尔值 | false | 输入控件原生“multiple”属性值 |
readonly | 布尔值 | false | 标记输入控件为只读状态 |
required | 布尔值 | false | 标记输入控件为必填项 |
tabindex | 字符串 number | 输入控件原生“tabindex”属性值 | |
noStoreData | 布尔值 | false | 配合 表单存储 忽略存储输入控件值 |
ignoreStoreData | 布尔值 | false | 与上述属性相同 |
calendarParams | object | 当 type="datepicker" 时,包含 日历参数 的对象 | |
colorPickerParams | object | 当 type="colorpicker" 时,包含 颜色选择器参数 的对象 | |
textEditorParams | object | 当 type="texteditor" 时,包含 文本编辑器参数 的对象 |
输入控件事件
事件 | 参数 | 描述 |
---|---|---|
<ListInput>,<Input> 事件 | ||
focus | (event) | 当用户聚焦到输入控件时触发 |
blur | (event) | 当用户失去输入控件焦点时触发 |
input | (event) | 当输入控件值更改时,立即触发。注:输入事件在 beforeinput、keypress、keyup、keydown 事件之后触发 |
change | (event) | 如果值已更改,则在失去焦点时触发 |
inputClear | (event) | 当输入控件的清除按钮被点击时触发 |
textareaResize | (event) | 如果可调整大小的 textarea 调整了大小,则触发。event.detail 将包含一个包含 initialHeight 、currentHeight 和 scrollHeight 属性的对象 |
inputEmpty | (event) | 当输入控件值变为空时触发 |
inputNotEmpty | (event) | 当输入控件值变为非空时触发 |
calendarChange | (value) | 当 type="datepicker" 的日历值更改时触发。作为一个参数,它接收一个包含所选日期的数组 |
colorPickerChange | (value) | 当 type="colorpicker" 的颜色选择器值更改时触发。作为一个参数,它接收一个包含颜色选择器值的的对象 |
textEditorChange | (value) | 当 type="texteditor" 的文本编辑器值更改时触发。作为一个参数,它接收文本编辑器值(HTML 字符串) |
输入控件插槽
<ListInput>
有用于自定义元素的额外插槽
default
- 如果type="select"
或type="textarea"
,则元素将被置于select
或textarea
标记内信息
- 元素将插入容器中,带有信息消息错误消息
- 元素将插入容器中,带有错误消息标签
- 元素将插入容器中,带有输入控件的标签输入
- 元素将插入在输入控件元素替换位置(input
属性还必须设置为false
)root-start
- 元素将插入<li>
元素的开头root
/root-end
- 元素将插入<li>
元素的结尾content-start
- 元素将插入<div class="item-content">
元素的开头content
/content-end
- 元素将插入<div class="item-content">
元素的结尾inner-start
- 元素将插入<div class="item-inner">
元素的开头inner
/inner-end
- 元素将插入<div class="item-inner">
元素的结尾媒体
- 元素将插入<div class="item-media">
元素中
示例
inputs.jsx
import React from 'react';
import { Navbar, Page, BlockTitle, List, Icon, ListInput, Range } from 'framework7-react';
export default () => (
<Page>
<Navbar title="Form Inputs" />
<BlockTitle>Full Layout / Stacked Labels</BlockTitle>
<List strongIos dividersIos insetIos>
<ListInput label="Name" type="text" placeholder="Your name" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput label="Password" type="password" placeholder="Your password" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput label="E-mail" type="email" placeholder="Your e-mail" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput label="URL" type="url" placeholder="URL" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput label="Phone" type="tel" placeholder="Your phone number" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput label="Gender" type="select" defaultValue="Male" placeholder="Please choose...">
<Icon icon="demo-list-icon" slot="media" />
<option value="Male">Male</option>
<option value="Female">Female</option>
</ListInput>
<ListInput
label="Birthday"
type="date"
defaultValue="2014-04-30"
placeholder="Please choose..."
>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput label="Date time" type="datetime-local" placeholder="Please choose...">
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput label="Range" input={false}>
<Icon icon="demo-list-icon" slot="media" />
<Range slot="input" value={50} min={0} max={100} step={1} />
</ListInput>
<ListInput label="Textarea" type="textarea" placeholder="Bio">
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput label="Resizable" type="textarea" resizable placeholder="Bio">
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
</List>
<BlockTitle>Floating Labels</BlockTitle>
<List strongIos dividersIos insetIos>
<ListInput label="Name" floatingLabel type="text" placeholder="Your name" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput
label="Password"
floatingLabel
type="password"
placeholder="Your password"
clearButton
>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput label="E-mail" floatingLabel type="email" placeholder="Your e-mail" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput label="URL" floatingLabel type="url" placeholder="URL" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput label="Phone" floatingLabel type="tel" placeholder="Your phone number" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput label="Resizable" floatingLabel type="textarea" resizable placeholder="Bio">
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
</List>
<BlockTitle>Floating Labels + Outline Inputs</BlockTitle>
<List strongIos dividersIos insetIos>
<ListInput outline label="Name" floatingLabel type="text" placeholder="Your name" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput
outline
label="Password"
floatingLabel
type="password"
placeholder="Your password"
clearButton
>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput
outline
label="E-mail"
floatingLabel
type="email"
placeholder="Your e-mail"
clearButton
>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput outline label="URL" floatingLabel type="url" placeholder="URL" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput
outline
label="Phone"
floatingLabel
type="tel"
placeholder="Your phone number"
clearButton
>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput
outline
label="Bio"
floatingLabel
type="textarea"
resizable
placeholder="Bio"
clearButton
>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
</List>
<BlockTitle>Validation + Additional Info</BlockTitle>
<List strongIos dividersIos insetIos>
<ListInput
label="Name"
type="text"
placeholder="Your name"
info="Default validation"
required
validate
clearButton
>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput
label="Fruit"
type="text"
placeholder="Type 'apple' or 'banana'"
required
validate
pattern="apple|banana"
clearButton
>
<Icon icon="demo-list-icon" slot="media" />
<span slot="info">
Pattern validation (<b>apple|banana</b>)
</span>
</ListInput>
<ListInput
label="E-mail"
type="email"
placeholder="Your e-mail"
info="Default e-mail validation"
required
validate
clearButton
>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput
label="URL"
type="url"
placeholder="Your URL"
info="Default URL validation"
required
validate
clearButton
>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput
label="Number"
type="text"
placeholder="Enter number"
info="With custom error message"
errorMessage="Only numbers please!"
required
validate
pattern="[0-9]*"
clearButton
>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
</List>
<BlockTitle>Icon + Input</BlockTitle>
<List strongIos dividersIos insetIos>
<ListInput type="text" placeholder="Your name" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput type="password" placeholder="Your password" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput type="email" placeholder="Your e-mail" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
<ListInput type="url" placeholder="URL" clearButton>
<Icon icon="demo-list-icon" slot="media" />
</ListInput>
</List>
<BlockTitle>Label + Input</BlockTitle>
<List strongIos dividersIos insetIos>
<ListInput label="Name" type="text" placeholder="Your name" clearButton />
<ListInput label="Password" type="password" placeholder="Your password" clearButton />
<ListInput label="E-mail" type="email" placeholder="Your e-mail" clearButton />
<ListInput label="URL" type="url" placeholder="URL" clearButton />
</List>
<BlockTitle>Only Inputs</BlockTitle>
<List strongIos dividersIos insetIos>
<ListInput type="text" placeholder="Your name" clearButton />
<ListInput type="password" placeholder="Your password" clearButton />
<ListInput type="email" placeholder="Your e-mail" clearButton />
<ListInput type="url" placeholder="URL" clearButton />
</List>
<BlockTitle>Inputs + Additional Info</BlockTitle>
<List strongIos dividersIos insetIos>
<ListInput type="text" placeholder="Your name" info="Full name please" clearButton />
<ListInput
type="password"
placeholder="Your password"
info="8 characters minimum"
clearButton
/>
<ListInput
type="email"
placeholder="Your e-mail"
info="Your work e-mail address"
clearButton
/>
<ListInput type="url" placeholder="URL" info="Your website URL" clearButton />
</List>
</Page>
);