输入/表单元素 Vue 组件

表单元素允许您创建灵活且美观的表单布局。表单元素只是众所周知的列表视图 (列表列表项Vue 组件) 但带有一些额外的组件。

查看 Framework7 的输入 / 表单元素以便了解其外观。

输入组件

包含以下组件:

输入属性

属性类型默认描述
<f7-list-input> 属性
media字符串列表项媒体图像 URL
label字符串输入的标签文本
浮动标签布尔值false启用浮动标签
outline布尔值false使输入轮廓
input布尔值true是否应该渲染输入元素。如果您想在内部使用自定义输入,请禁用。
type字符串输入类型。所有默认的 HTML5 输入类型,以及一些特殊的类型:
  • textarea- 渲染 textarea 元素
  • select- 渲染 select 元素
  • datepicker- 在输入聚焦时打开日历on input focus
  • colorpicker- 在输入聚焦时打开颜色选择器on input focus
  • texteditor- 在输入聚焦时打开文本编辑器on input focus
resizable布尔值false使 textarea 可调整大小
inputStyle字符串
对象
输入的 "style" 属性的值,如果您需要传递额外的样式
clear-button布尔值false添加输入清除按钮,点击时将清除输入值
validate布尔值false当启用时,输入值将根据传递的 "pattern" 或根据输入类型在更改时进行验证。如果您使用自定义验证并在显示/隐藏错误消息的位置需要更多控制,则最好禁用验证并使用error-messageerror-message-forceprops.
输入时验证布尔值false当启用时,输入仅在失去焦点时进行验证。
onValidate函数输入验证时执行的回调,返回布尔值指示输入是否有效。
<f7-list-input
  type="email"
  validate
  :onValidate="(isValid) => setInputValid(isValid)"
/>
错误消息字符串当输入值无效时显示的自定义错误消息
强制错误消息布尔值false强制错误消息为强制。在您使用自定义验证并希望在需要时显示/隐藏错误消息的情况下很有用
info字符串带有关输入信息的自定义附加文本
name字符串输入名称
占位符字符串输入占位符
id字符串包装元素 ID 属性
输入 ID字符串输入元素 ID 属性
字符串
数字
数组
对象

输入值。

如果type="datepicker"则值必须作为日历接受的 - 日期数组,例如:value="[new Date()]"

如果type="colorpicker"则值必须作为颜色选择器接受的 - 颜色对象,例如:value="{hex: '#ff0000'}"

如果type="texteditor"则值应为 HTML 字符串

inputmode字符串输入的本地 "inputmode" 属性的值
size字符串
数字
输入的本地 "size" 属性的值
pattern字符串输入的本地 "pattern" 属性的值
accept字符串
数字
输入的本地 "accept" 属性的值
autocomplete字符串输入的本地 "autocomplete" 属性的值
autofocus布尔值false输入的本地 "autofocus" 属性的值
autosave字符串输入的本地 "autosave" 属性的值
禁用布尔值false将输入标记为禁用
max字符串
数字
输入的本地"max"属性的值
min字符串
数字
输入的本地"min"属性的值
step字符串
数字
输入的本地"step"属性的值
maxlength字符串
数字
输入的本地"maxlength"属性的值
minlength字符串
数字
输入的本地"minlength"属性的值
multiple布尔值false输入的本地"multiple"属性的值
只读布尔值false将输入标记为只读
required布尔值false将输入标记为必填
tabindex字符串
数字
输入的本地"tabindex"属性的值
不存储数据布尔值false允许在使用时忽略输入值被存储表单存储
忽略存储数据布尔值false与上一个相同
wrap布尔值true当启用时,它将被包装在<li>元素之前插入元素
日历参数对象带有日历参数当使用时type="datepicker"
颜色选择器参数对象带有颜色选择器参数当使用时type="colorpicker"
文本编辑器参数对象带有文本编辑器参数当使用时type="texteditor"
<f7-input> 属性
outline布尔值false使输入轮廓
wrap布尔值true定义输入是否应被包装在<div class="input">元素中。
type字符串输入类型。所有默认的 HTML5 输入类型,以及一些特殊的类型:
  • textarea- 渲染 textarea 元素
  • select- 渲染 select 元素
  • datepicker- 在输入聚焦时打开日历on input focus
  • colorpicker- 在输入聚焦时打开颜色选择器on input focus
  • texteditor- 在输入聚焦时打开文本编辑器on input focus
resizable布尔值false使 textarea 可调整大小
inputStyle字符串
对象
输入的 "style" 属性的值,如果您需要传递额外的样式
clear-button布尔值false添加输入清除按钮,点击时将清除输入值
validate布尔值false当启用时,输入值将根据传递的 "pattern" 或根据输入类型在更改时进行验证。如果您使用自定义验证并在显示/隐藏错误消息的位置需要更多控制,则最好禁用验证并使用error-messageerror-message-forceprops.
输入时验证布尔值false当启用时,输入仅在失去焦点时进行验证。
onValidate函数输入验证时执行的回调,返回布尔值指示输入是否有效。
<f7-input
  type="email"
  validate
  :onValidate="(isValid) => setInputValid(isValid)"
/>
错误消息字符串当输入值无效时显示的自定义错误消息
强制错误消息布尔值false强制错误消息为强制。在您使用自定义验证并希望在需要时显示/隐藏错误消息的情况下很有用
info字符串带有关输入信息的自定义附加文本
name字符串输入名称
占位符字符串输入占位符
id字符串包装元素 ID 属性
输入 ID字符串输入元素 ID 属性
字符串
数字

输入值。

如果type="datepicker"则值必须作为日历接受的 - 日期数组,例如:value="[new Date()]"

如果type="colorpicker"则值必须作为颜色选择器接受的 - 颜色对象,例如:value="{hex: '#ff0000'}"

如果type="texteditor"则值应为 HTML 字符串

inputmode字符串输入的本地 "inputmode" 属性的值
size字符串
数字
输入的本地 "size" 属性的值
pattern字符串输入的本地 "pattern" 属性的值
accept字符串
数字
输入的本地 "accept" 属性的值
autocomplete字符串输入的本地 "autocomplete" 属性的值
autofocus布尔值false输入的本地 "autofocus" 属性的值
autosave字符串输入的本地 "autosave" 属性的值
已选中布尔值false将输入标记为选中
禁用布尔值false将输入标记为禁用
max字符串
数字
输入的本地"max"属性的值
min字符串
数字
输入的本地"min"属性的值
step字符串
数字
输入的本地"step"属性的值
maxlength字符串
数字
输入的本地"maxlength"属性的值
minlength字符串
数字
输入的本地"minlength"属性的值
multiple布尔值false输入的本地"multiple"属性的值
只读布尔值false将输入标记为只读
required布尔值false将输入标记为必填
tabindex字符串
数字
输入的本地"tabindex"属性的值
不存储数据布尔值false允许在使用时忽略输入值被存储表单存储
忽略存储数据布尔值false与上一个相同
日历参数对象带有日历参数当使用时type="datepicker"
颜色选择器参数对象带有颜色选择器参数当使用时type="colorpicker"
文本编辑器参数对象带有文本编辑器参数当使用时type="texteditor"

输入事件

事件参数描述
<f7-list-input>, <f7-input> 事件
focus(event)当用户聚焦到输入时触发。
blur(event)当用户失去输入焦点时触发。
input(event)输入值改变时立即触发。注意:输入事件在beforeinput、keypress、keyup、keydown事件之后触发。
change(event)如果值改变,则在blur时触发。
输入:清除(event)当输入清除按钮被点击时触发
文本区域:调整大小(event)如果可调整大小的文本区域被调整大小,则触发。event.detail将包含对象initialHeight, currentHeightscrollHeight属性
输入:为空(event)当输入值变为空时触发
输入:非空(event)当输入值变为非空时触发
日历:更改(值)当文本编辑器值改变时触发。作为参数,它接收文本编辑器值(HTML字符串)。type="datepicker" Calendar value changed. As an argument it receives array with selected dates.
颜色选择器:更改(值)当文本编辑器值改变时触发。作为参数,它接收文本编辑器值(HTML字符串)。type="colorpicker" Color Picker value changed. As an argument it receives object with Color Picker value.
文本编辑器:更改(值)当文本编辑器值改变时触发。作为参数,它接收文本编辑器值(HTML字符串)。type="texteditor" Text Editor value changed. As an argument it receives Texteditor value (HTML string).

输入插槽

<f7-list-input>有额外的插槽用于自定义元素:

输入 v-model

f7-list-inputf7-inputVue 组件支持v-modelonvalueprop:

<template>
  <p>Name is {{ name }}</p>
  <p>Email is {{ email }}</p>
  ...
  <f7-list-input
    label="Name"
    type="text"
    placeholder="Your name"
    clear-button
    v-model:value="name"
  />

  <f7-input
    type="text"
    placeholder="Your email"
    clear-button
    v-model:value="email"
  />
  ...
</template>
<script>
  export default {
    data() {
      name: '',
      email: '',
    },
    ...
  };
</script>

示例

inputs.vue
<template>
  <f7-page>
    <f7-navbar title="Form Inputs"></f7-navbar>

    <f7-block-title>Full Layout / Stacked Labels</f7-block-title>
    <f7-list strong-ios dividers-ios inset-ios>
      <f7-list-input label="Name" type="text" placeholder="Your name" clear-button>
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input label="Password" type="password" placeholder="Your password" clear-button>
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input label="E-mail" type="email" placeholder="Your e-mail" clear-button>
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input label="URL" type="url" placeholder="URL" clear-button>
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input label="Phone" type="tel" placeholder="Your phone number" clear-button>
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input label="Gender" type="select" placeholder="Please choose...">
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
        <option value="Male">Male</option>
        <option value="Female">Female</option>
      </f7-list-input>

      <f7-list-input label="Birthday" type="date" placeholder="Please choose...">
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input label="Date time" type="datetime-local" placeholder="Please choose...">
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input label="Range" :input="false">
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
        <template #input>
          <f7-range :value="50" :min="0" :max="100" :step="1" />
        </template>
      </f7-list-input>

      <f7-list-input label="Textarea" type="textarea" placeholder="Bio">
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input label="Resizable" type="textarea" resizable placeholder="Bio">
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>
    </f7-list>

    <f7-block-title>Floating Labels</f7-block-title>
    <f7-list strong-ios dividers-ios inset-ios>
      <f7-list-input label="Name" floating-label type="text" placeholder="Your name" clear-button>
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input
        label="Password"
        floating-label
        type="password"
        placeholder="Your password"
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input
        label="E-mail"
        floating-label
        type="email"
        placeholder="Your e-mail"
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input label="URL" floating-label type="url" placeholder="URL" clear-button>
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input
        label="Phone"
        floating-label
        type="tel"
        placeholder="Your phone number"
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input label="Resizable" floating-label type="textarea" resizable placeholder="Bio">
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>
    </f7-list>

    <f7-block-title>Floating Labels + Outline Inputs</f7-block-title>
    <f7-list strong-ios dividers-ios inset-ios>
      <f7-list-input
        outline
        label="Name"
        floating-label
        type="text"
        placeholder="Your name"
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>
      <f7-list-input
        outline
        label="Password"
        floating-label
        type="password"
        placeholder="Your password"
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>
      <f7-list-input
        outline
        label="E-mail"
        floating-label
        type="email"
        placeholder="Your e-mail"
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>
      <f7-list-input outline label="URL" floating-label type="url" placeholder="URL" clear-button>
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>
      <f7-list-input
        outline
        label="Phone"
        floating-label
        type="tel"
        placeholder="Your phone number"
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>
      <f7-list-input
        outline
        label="Bio"
        floating-label
        type="textarea"
        resizable
        placeholder="Bio"
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>
    </f7-list>

    <f7-block-title>Validation + Additional Info</f7-block-title>
    <f7-list strong-ios dividers-ios inset-ios>
      <f7-list-input
        label="Name"
        type="text"
        placeholder="Your name"
        info="Default validation"
        required
        validate
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input
        label="Fruit"
        type="text"
        placeholder="Type 'apple' or 'banana'"
        required
        validate
        pattern="apple|banana"
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
        <template #info>
          <span>Pattern validation (<b>apple|banana</b>)</span>
        </template>
      </f7-list-input>

      <f7-list-input
        label="E-mail"
        type="email"
        placeholder="Your e-mail"
        info="Default e-mail validation"
        required
        validate
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input
        label="URL"
        type="url"
        placeholder="Your URL"
        info="Default URL validation"
        required
        validate
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input
        label="Number"
        type="text"
        placeholder="Enter number"
        info="With custom error message"
        error-message="Only numbers please!"
        required
        validate
        pattern="[0-9]*"
        clear-button
      >
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>
    </f7-list>

    <f7-block-title>Icon + Input</f7-block-title>
    <f7-list strong-ios dividers-ios inset-ios>
      <f7-list-input type="text" placeholder="Your name" clear-button>
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input type="password" placeholder="Your password" clear-button>
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input type="email" placeholder="Your e-mail" clear-button>
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>

      <f7-list-input type="url" placeholder="URL" clear-button>
        <template #media>
          <f7-icon icon="demo-list-icon" />
        </template>
      </f7-list-input>
    </f7-list>

    <f7-block-title>Label + Input</f7-block-title>
    <f7-list strong-ios dividers-ios inset-ios>
      <f7-list-input label="Name" type="text" placeholder="Your name" clear-button></f7-list-input>

      <f7-list-input
        label="Password"
        type="password"
        placeholder="Your password"
        clear-button
      ></f7-list-input>

      <f7-list-input
        label="E-mail"
        type="email"
        placeholder="Your e-mail"
        clear-button
      ></f7-list-input>

      <f7-list-input label="URL" type="url" placeholder="URL" clear-button></f7-list-input>
    </f7-list>

    <f7-block-title>Only Inputs</f7-block-title>
    <f7-list strong-ios dividers-ios inset-ios>
      <f7-list-input type="text" placeholder="Your name" clear-button></f7-list-input>

      <f7-list-input type="password" placeholder="Your password" clear-button></f7-list-input>

      <f7-list-input type="email" placeholder="Your e-mail" clear-button></f7-list-input>

      <f7-list-input type="url" placeholder="URL" clear-button></f7-list-input>
    </f7-list>

    <f7-block-title>Inputs + Additional Info</f7-block-title>
    <f7-list strong-ios dividers-ios inset-ios>
      <f7-list-input
        type="text"
        placeholder="Your name"
        info="Full name please"
        clear-button
      ></f7-list-input>

      <f7-list-input
        type="password"
        placeholder="Your password"
        info="8 characters minimum"
        clear-button
      ></f7-list-input>

      <f7-list-input
        type="email"
        placeholder="Your e-mail"
        info="Your work e-mail address"
        clear-button
      ></f7-list-input>

      <f7-list-input
        type="url"
        placeholder="URL"
        info="Your website URL"
        clear-button
      ></f7-list-input>
    </f7-list>
  </f7-page>
</template>
<script>
import {
  f7Navbar,
  f7Page,
  f7BlockTitle,
  f7List,
  f7Icon,
  f7ListInput,
  f7Range,
} from 'framework7-vue';

export default {
  components: {
    f7Navbar,
    f7Page,
    f7BlockTitle,
    f7List,
    f7Icon,
    f7ListInput,
    f7Range,
  },
};
</script>
无噪 Logo
无噪文档
中文文档 · 复刻官网
查看所有 ↗