Chuyển tới nội dung chính

Input / Form

Input Components

Bao gồm các components:

  • ListInput
  • Input - Input element

Input Properties

<ListInput/> properties

PropTypeDefaultDescription
labelstringInput's label
inputbooleantrueRender input element hoặc không
typestringInput type. Tất cả input type mặc định của HTML5: text, password, number,... Ngoài ra cò có một số type đặc biệt:
  • textarea - Render Textarea
  • select - Render Select
  • datepicker - Render Date Picker
  • colorpicker - Render Color Picker
  • texteditor - Render Text Editor
resizablebooleanfalseTrường hợp type là textarea thì resizable cho phép textarea element có khả năng thay đổi kích thước
minRowsnumberSử dụng khi type="textarea"resizable={true}. Biểu thị số dòng khởi tạo của textarea trước khi resize ( giá trị từ 1 đến 20)
maxRowsnumberSử dụng khi type="textarea"resizable={true}. Biểu thị số dòng đạt được sẽ kết thúc resize ( giá trị từ 1 đến 20)
inputStyleobjectTùy chỉnh style cho input element
clearButtonbooleanfalseThêm nút xóa giá trị của input khi người dùng click/press
validatebooleanfalseCho phép input element thực hiện kiểm tra hợp lệ khi giá trị input thay đổi dựa vao pattern cụ thể hoặc mặc định của HTML5 . Trường hợp muốn tùy chỉnh việc kiểm tra hợ lệ, set validation thành false và sử dụng error-message cùng với error-message-force props.
validateOnBlurbooleanfalseThực hiện kiểm tra hợp lệ khi người dùng bỏ focus vào input element
onValidatefunctionCallback thực thi khi input thực hiện kiểm tra hợp lệ, trả về boolean thể hiện giá trị input hợp lệ hay không
<ListInput type="email" validate onValidate={(isValid) => setInputValid(isValid)}/>
errorMessagestringTùy chỉnh Error message hiển thị khi giá trị của input không hợp lệ
errorMessageForcebooleanfalseBuộc input element thông báo lỗi không hợp lệ
infostringThêm thông tin thêm về input element
namestringInput name
placeholderstringInput placeholder
idstringGiá trị thuộc tính ID cho Input wrapper element
inputIdstringGiá trị thuộc tính ID cho Input element
valuestring | numberGiá trị của input.
  • Trường hợp type="datepicker" Giá trị sẽ là mảng các ngày, ví dụ value={[new Date()]}"
  • Trường hợp type="colorpicker" Giá trị là Object thông tin colors, ví dụ value={{hex: '#ff0000'}}
  • Trường hợp type="texteditor" giá trị sẽ là HTML string
defaultValuestring |numberGiá trị mặc định của input, trong trường hợp sử dụng uncontrolled component
inputmodestringGiá trị thuộc tính input's native "inputmode"
sizestring
numberGiá trị thuộc tính input's native "size"
patternstringGiá trị thuộc tính input's native "pattern"
acceptstring | numberGiá trị thuộc tính input's native "accept"
autocompletestringGiá trị thuộc tính input's native "autocomplete"
autofocusbooleanfalseGiá trị thuộc tính input's native "autofocus"
autosavestringGiá trị thuộc tính input's native "autosave"
disabledbooleanfalseVô hiệu hóa input element
maxstring | numberGiá trị thuộc tính input's native "max"
minstring |numberGiá trị thuộc tính input's native "min"
stepstring | numberGiá trị thuộc tính input's native "step"
maxlengthstring |numberGiá trị thuộc tính input's native "maxlength"
minlengthstring | numberGiá trị thuộc tính input's native "minlength"
multiplebooleanfalseGiá trị thuộc tính input's native "multiple"
readonlybooleanfalseReadonly Input
requiredbooleanfalseRequired Input
tabindexstring | numberGiá trị thuộc tính input's native "tabindex"
wrapbooleantrueListInput element sẽ được bao bởi <li> element
calendarParamsobjectObject với các Calendar Parameters sử dụng trong trường hợp type="datepicker"
colorPickerParamsobjectObject với các Color Picker Parameters sử dụng trong trường hợp type="colorpicker"
textEditorParamsobjectObject với các Text Editor Parameters sử dụng trong trường hợp type="texteditor"

<Input/> properties

PropTypeDefaultDescription
wrapbooleantrueXác định input element được bao bởi <div className="input"> element hoặc không.
typestringInput type. Tất cả input type mặc định của HTML5: text, password, number,... Ngoài ra cò có một số type đặc biệt:
  • textarea - Render Textarea
  • select - Render Select
  • datepicker - Render Date Picker
  • colorpicker - Render Color Picker
  • texteditor - Render Text Editor
resizablebooleanfalseTrường hợp type là textarea thì resizable cho phép textarea element có khả năng thay đổi kích thước
minRowsnumberSử dụng khi type="textarea"resizable={true}. Biểu thị số dòng khởi tạo của textarea trước khi resize ( giá trị từ 1 đến 20)
maxRowsnumberSử dụng khi type="textarea"resizable={true}. Biểu thị số dòng đạt được sẽ kết thúc resize ( giá trị từ 1 đến 20)
inputStyleobjectTùy chỉnh style cho input element
clearButtonbooleanfalseThêm nút xóa giá trị của input khi người dùng click/press
validatebooleanfalseCho phép input element thực hiện kiểm tra hợp lệ khi giá trị input thay đổi dựa vao pattern cụ thể hoặc mặc định của HTML5 . Trường hợp muốn tùy chỉnh việc kiểm tra hợ lệ, set validation thành false và sử dụng error-message cùng với error-message-force props.
validateOnBlurbooleanfalseThực hiện kiểm tra hợp lệ khi người dùng bỏ focus vào input element
onValidatefunctionCallback thực thi khi input thực hiện kiểm tra hợp lệ, trả về boolean thể hiện giá trị input hợp lệ hay không

<ListInput
type="email"
validate
onValidate={(isValid) => setInputValid(isValid)}/>
errorMessagestringTùy chỉnh Error message hiển thị khi giá trị của input không hợp lệ
errorMessageForcebooleanfalseBuộc input element thông báo lỗi không hợp lệ
infostringThêm thông tin thêm về input element
namestringInput name
placeholderstringInput placeholder
idstringGiá trị thuộc tính ID cho Input wrapper element
inputIdstringGiá trị thuộc tính ID cho Input element
valuestring | numberGiá trị của input.
  • Trường hợp type="datepicker" Giá trị sẽ là mảng các ngày, ví dụ value={[new Date()]}"
  • Trường hợp type="colorpicker" Giá trị là Object thông tin colors, ví dụ value={{hex: '#ff0000'}}
  • Trường hợp type="texteditor" giá trị sẽ là HTML string
defaultValuestring | numberGiá trị mặc định của input, trong trường hợp sử dụng uncontrolled component
inputmodestringGiá trị thuộc tính input's native "inputmode"
sizestring | numberGiá trị thuộc tính input's native "size"
patternstringGiá trị thuộc tính input's native "pattern"
acceptstring | numberGiá trị thuộc tính input's native "accept"
autocompletestringGiá trị thuộc tính input's native "autocomplete"
autofocusbooleanfalseGiá trị thuộc tính input's native "autofocus"
autosavestringGiá trị thuộc tính input's native "autosave"
disabledbooleanfalseVô hiệu hóa input element
maxstring | numberGiá trị thuộc tính input's native "max"
minstring | numberGiá trị thuộc tính input's native "min"
stepstring | numberGiá trị thuộc tính input's native "step"
maxlengthstring | numberGiá trị thuộc tính input's native "maxlength"
minlengthstring | numberGiá trị thuộc tính input's native "minlength"
multiplebooleanfalseGiá trị thuộc tính input's native "multiple"
readonlybooleanfalseReadonly Input
requiredbooleanfalseRequired Input
tabindexstring | numberGiá trị thuộc tính input's native "tabindex"
calendarParamsobjectObject với các Calendar Parameters sử dung trong trường hợp type="datepicker"
colorPickerParamsobjectObject với các Color Picker Parameters sử dung trong trường hợp type="colorpicker"
textEditorParamsobjectObject với các Text Editor Parameters sử dung trong trường hợp type="texteditor"

Input/ListInput Events

EventArgumentsPropDescription
focus(event)onFocusKích hoạt khi người dùng focus vào input.
blur(event)onBlurKích hoạt khi người dùng không còn focus vào input.
input(event)onInputKích hoạt khi giá trị của input thay đổi. Lưu Ý: Input event triggers sau beforeinput, keypress, keyup, keydown events.
change(event)onChangeKích hoạt khi giá trị của input thay đổi sau khi người dùng không còn focus (blur) vào input
inputClear(event)onInputClearKích hoạt khi người dùng click vào button xóa dữ liệu
textareaResize(event)onTextareaResizeKích hoạt khi textarea thay đổi kích thước. event.detail là object bao gồm initialHeight, currentHeight và scrollHeight properties
inputEmpty(event)onInputEmptyKích hoạt khi giá trị của input element thành trống
inputNotempty(event)onInputNotemptyKích hoạt khi giá trị của input element khong còn trống
calendarChange(value)onCalendarChangeKích hoạt type="datepicker" khi giá trị của calendar thay đổi. Nhận vào mảng với các ngày được chọn.
textEditorChange(value)onTextEditorChangeKích hoạt khi type="texteditor" giá trị của Text Editor thay đổi. Nhận vào giá trị của text editor (HTML string).

Input Slots

<ListInput/> has additional slots for custom elements:

  • default - Trường hợp type="select" hoặc type="textarea" - element sẽ được chèn vào trong select họăc textarea tags.
  • info - element sẽ được chèn vào trong container info message
  • error-message - element sẽ được chèn vào trong container error message
  • label - element sẽ được chèn vào trong container input label
  • input - element sẽ thay thế input element (input phải set thành false)
  • root-start - element đuợc chèn vào đầu của <li> element
  • root / root-end - element được chèn vào cuối của <li> element
  • content-start - element đuợc chèn vào đầu của <div className="item-content"> element
  • content / content-end - element đuợc chèn vào cuôi của <div className="item-content"> element
  • inner-start - element đuợc chèn vào đầu của <div className="item-inner"> element
  • inner / inner-end - element đuợc chèn vào cuối của <div className="item-inner"> element

Form Methods

convertToData và fillFormData là 2 methods hữu ích giúp lấy form data và điền nội dung cho form:

import { zmp } from "zmp-framework/react";

Lấy form data dưới dạng object

zmp.form.convertToData(form);
  • form - HTMLElement hoặc string (CSS Selector) của form cần lấy data. Required.
  • Method trả về object

Điền nội dung form từ data

zmp.form.fillFromData(form, data);
  • form - HTMLElement hoặc string (CSS Selector) của form cần điền data. Required.
  • data - object object chứa form data. Required.
  • Lưu ý mỗi input cần cung cấp thuộc tính name, name sẽ trở thành object filed khi lấy data cũng như điền nội data
  • Checkboxes và "multiple" selects biểu diễn dưới dạng mảng (Arrays)

Ví dụ

Code demo fallback when rendering server side!