輸入 / 表單元素 React 元件

表單元素可讓您建立彈性又美觀的表單版面。表單元素只是眾所周知的 清單檢視清單清單項目 React 元件),但多了幾個額外的元件。

查看 Framework7 的 輸入 / 表單元素 以了解它們的外觀。

輸入元件

包含下列元件

輸入屬性

屬性類型預設值說明
<ListInput> 屬性
媒體字串清單項目媒體圖片網址
標籤字串輸入的標籤文字
浮動標籤布林值false啟用浮動標籤
外框布林值false使輸入有外框
輸入布林值true是否應呈現輸入元素。如果您想在裡面使用自訂輸入,請停用。
類型字串輸入類型。所有預設 HTML5 輸入類型,以及一些特殊類型
  • textarea - 呈現文字區域元素
  • select - 呈現選取元素
  • datepicker - 在輸入焦點上開啟 日曆
  • colorpicker - 在輸入焦點上開啟 顏色選擇器
  • texteditor - 在輸入焦點上開啟 文字編輯器
可調整大小布林值false使文字區域可調整大小
輸入樣式物件輸入的「樣式」屬性值,以防您需要傳遞額外的樣式
清除按鈕布林值false新增輸入清除按鈕,按一下會清除輸入值
驗證布林值false啟用後,輸入值會根據傳遞的「樣式」或輸入類型在變更時進行驗證。如果您使用自訂驗證,且需要更進一步控制顯示/隱藏錯誤訊息的位置,最好停用驗證並將 error-messageerror-message-force 屬性搭配使用。
失去焦點時驗證布林值false啟用後,輸入只會在失去焦點時驗證。
onValidate函數輸入驗證時執行的回呼,傳回布林值表示輸入是否有效。
<ListInput
  type="email"
  validate
  :onValidate={(isValid) => setInputValid(isValid)}
/>
errorMessage字串當輸入值無效時顯示的客製錯誤訊息
errorMessageForce布林值false強制錯誤訊息。當您使用客製驗證並希望在需要時顯示/隱藏錯誤訊息時很有用
info字串關於輸入的客製附加資訊文字
name字串輸入名稱
placeholder字串輸入提示文字
id字串包裝元素 ID 屬性
inputId字串輸入元素 ID 屬性
value字串
數字

輸入值。

如果 type="datepicker",則必須傳遞值為 日曆 接受的內容 - 包含日期的陣列,例如 value={[new Date()]}

如果 type="colorpicker",則必須傳遞值為 顏色選擇器 接受的內容 - 包含顏色的物件,例如 value={{hex: '#ff0000'}}

如果 type="texteditor",則值應為 HTML 字串

defaultValue字串
數字
輸入值,在不受控元件的情況下
inputmode字串輸入的原生「inputmode」屬性的值
size字串
數字
輸入的原生「size」屬性的值
pattern字串輸入的原生「pattern」屬性的值
accept字串
數字
輸入的原生「accept」屬性的值
autocomplete字串輸入的原生「autocomplete」屬性的值
autofocus布林值false輸入的原生「autofocus」屬性的值
autosave字串輸入的原生「autosave」屬性的值
disabled布林值false標記輸入為已停用
max字串
數字
輸入的原生「max」屬性的值
min字串
數字
輸入的原生「min」屬性的值
step字串
數字
輸入的原生「step」屬性的值
maxlength字串
數字
輸入的原生「maxlength」屬性的值
minlength字串
數字
輸入的原生「minlength」屬性的值
multiple布林值false輸入的原生「multiple」屬性的值
readonly布林值false標記輸入為唯讀
required布林值false標記輸入為必填
tabindex字串
數字
輸入的原生「tabindex」屬性的值
noStoreData布林值false使用 表單儲存 時,允許忽略輸入值儲存
ignoreStoreData布林值false與上一個相同
wrap布林值true啟用時,它將被包覆在 <li> 元素中
calendarParams物件type="datepicker" 時使用的 日曆參數 物件
colorPickerParams物件type="colorpicker" 時使用的 顏色選擇器參數 物件
textEditorParams物件type="texteditor" 時使用的 文字編輯器參數 物件
<Input> 屬性
外框布林值false使輸入有外框
wrap布林值true定義輸入是否使用 <div class="input"> 元素包覆。
類型字串輸入類型。所有預設 HTML5 輸入類型,以及一些特殊類型
  • textarea - 呈現文字區域元素
  • select - 呈現選取元素
  • datepicker - 在輸入焦點上開啟 日曆
  • colorpicker - 在輸入焦點上開啟 顏色選擇器
  • texteditor - 在輸入焦點上開啟 文字編輯器
可調整大小布林值false使文字區域可調整大小
輸入樣式物件輸入的「樣式」屬性值,以防您需要傳遞額外的樣式
清除按鈕布林值false新增輸入清除按鈕,按一下會清除輸入值
驗證布林值false啟用後,輸入值會根據傳遞的「樣式」或輸入類型在變更時進行驗證。如果您使用自訂驗證,且需要更進一步控制顯示/隱藏錯誤訊息的位置,最好停用驗證並將 error-messageerror-message-force 屬性搭配使用。
失去焦點時驗證布林值false啟用後,輸入只會在失去焦點時驗證。
onValidate函數輸入驗證時執行的回呼,傳回布林值表示輸入是否有效。
<Input
  type="email"
  validate
  :onValidate={(isValid) => setInputValid(isValid)}
/>
errorMessage字串當輸入值無效時顯示的客製錯誤訊息
errorMessageForce布林值false強制錯誤訊息。當您使用客製驗證並希望在需要時顯示/隱藏錯誤訊息時很有用
info字串關於輸入的客製附加資訊文字
name字串輸入名稱
placeholder字串輸入提示文字
id字串包裝元素 ID 屬性
inputId字串輸入元素 ID 屬性
value字串
數字

輸入值。

如果 type="datepicker",則必須傳遞值為 日曆 接受的內容 - 包含日期的陣列,例如 value={[new Date()]}

如果 type="colorpicker",則必須傳遞值為 顏色選擇器 接受的內容 - 包含顏色的物件,例如 value={{hex: '#ff0000'}}

如果 type="texteditor",則值應為 HTML 字串

defaultValue字串
數字
輸入值,在不受控元件的情況下
inputmode字串輸入的原生「inputmode」屬性的值
size字串
數字
輸入的原生「size」屬性的值
pattern字串輸入的原生「pattern」屬性的值
accept字串
數字
輸入的原生「accept」屬性的值
autocomplete字串輸入的原生「autocomplete」屬性的值
autofocus布林值false輸入的原生「autofocus」屬性的值
autosave字串輸入的原生「autosave」屬性的值
checked布林值false標記輸入為已選取
disabled布林值false標記輸入為已停用
max字串
數字
輸入的原生「max」屬性的值
min字串
數字
輸入的原生「min」屬性的值
step字串
數字
輸入的原生「step」屬性的值
maxlength字串
數字
輸入的原生「maxlength」屬性的值
minlength字串
數字
輸入的原生「minlength」屬性的值
multiple布林值false輸入的原生「multiple」屬性的值
readonly布林值false標記輸入為唯讀
required布林值false標記輸入為必填
tabindex字串
數字
輸入的原生「tabindex」屬性的值
noStoreData布林值false使用 表單儲存 時,允許忽略輸入值儲存
ignoreStoreData布林值false與上一個相同
calendarParams物件type="datepicker" 時使用的 日曆參數 物件
colorPickerParams物件type="colorpicker" 時使用的 顏色選擇器參數 物件
textEditorParams物件type="texteditor" 時使用的 文字編輯器參數 物件

輸入事件

事件參數說明
<ListInput>、<Input> 事件
focus(事件)當使用者將焦點移至輸入時觸發。
blur(事件)當使用者失去輸入焦點時觸發。
輸入(事件)輸入值變更時立即觸發。注意:輸入事件會在 beforeinput、keypress、keyup、keydown 事件後觸發。
change(事件)如果值變更,則在失去焦點時觸發。
inputClear(事件)當輸入清除按鈕按一下時觸發
textareaResize(事件)如果可調整大小的文字區域大小調整,則觸發。event.detail 將包含具有 initialHeightcurrentHeightscrollHeight 屬性的物件
inputEmpty(事件)當輸入值變為空值時觸發
inputNotEmpty(事件)當輸入值變為非空值時觸發
calendarChange(值)type="datepicker" 日曆值變更時觸發。它會接收包含已選取日期的陣列作為參數。
colorPickerChange(值)type="colorpicker" 顏色選擇器值變更時觸發。它會接收包含顏色選擇器值的物件作為參數。
textEditorChange(值)type="texteditor" 文字編輯器值變更時觸發。它會接收文字編輯器值 (HTML 字串) 作為參數。

輸入插槽

<ListInput> 有額外的插槽可供自訂元素使用

範例

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>
);