为什么捐赠
API 浏览器
联系站长
输入框

QInput 组件用于捕获用户的文本输入。它使用 v-model,类似于常规输入框。它支持错误提示和表单验证,并提供多种样式、颜色和类型供选择。

正在加载 QInput API...

设计

WARNING

QInput 只能使用一种主要设计风格(filledoutlinedstandoutborderless),不能同时使用多种,因为它们是互斥的。

设计概览



颜色

颜色



Standard(标准样式)

Standard



Filled(填充样式)

Filled



Outlined(轮廓样式)

Outlined



Standout(凸显样式)

Standout



Standout 设计最典型的使用场景之一是在 QToolbar 中:

QToolbar 中的 Standout



Borderless(无边框样式)

borderless 设计可以让 QInput 无缝融入其他组件,不会绘制边框或改变背景色:

Borderless



圆角设计

rounded 属性仅在 Filled、Outlined 和 Standout 设计下生效,如下方示例所示:

圆角



直角边框

square 属性仅在 Filled、Outlined 和 Standout 设计下有意义,如下方示例所示:

直角边框



强制深色模式

强制深色模式



基础功能

原生属性

所有设置在 QInput 上但不在 APIprops 列表里的属性,都会被透传到原生元素(inputtextarea)上。例如:autocomplete、placeholder 等。

请参考以下资源了解更多原生属性(对于 input 还需注意每种 type 的特有属性):

可清除

使用 clearable 属性可以让用户通过一个附加图标将 model 数据重置为 null。下方示例中第二个 QInput 的效果等价于使用 clearable

WARNING

该功能不兼容 v-model.trim 等修饰符,因为 Vue 在这种情况下无法处理 null 值。

可清除



输入类型

以下 QInput 使用 type 属性来渲染对应的原生 <input type="..."> 元素。

WARNING

具体的支持情况和行为完全取决于渲染页面的浏览器,而非 Quasar 的核心代码。

输入类型



TIP

某些输入类型(如 datetime)会始终显示浏览器原生控件,因此如果您使用了 label,建议同时设置 stack-label,否则标签会与浏览器原生控件重叠。

数字类型输入

使用 v-model.number(注意 number 修饰符)配合 type="number" 属性:

数字类型输入



文件类型输入

替代方案

与其使用 type="file" 的 QInput,不如考虑使用 QFile 文件选择器甚至 QUploader 组件。如果您仍然想使用 QInput,请注意下方的警告。

WARNING

当 QInput 的 type="file" 时,不要使用 v-model。浏览器安全策略不允许为此类输入设置值。因此,您只能读取它(通过监听 @update:model-value 事件),而不能写入。

文件类型输入



文本域

文本域



当您需要 QInput 随内容自动增高时,可以使用 autogrow 属性:

自动增长



前缀和后缀

前缀和后缀



自定义标签

通过 label 插槽,您可以自定义标签的外观或添加特殊功能,如 QTooltip

TIP

别忘了设置 label-slot 属性。

如果您想与标签中的内容(如 QTooltip)进行交互,请在插槽内的元素上添加 all-pointer-events CSS 类。

自定义标签



阴影文字

阴影文字



在插槽中使用 type=“submit” 的 QBtn

WARNING

当在 QField、QInput 或 QSelect 的 “before”、“after”、“prepend” 或 “append” 插槽中放置 type=“submit” 的 QBtn 时,您还应该在该 QBtn 上添加 @click 监听器,并在监听器中调用提交表单的方法。因为这些插槽中的 “click” 事件不会冒泡到父元素。

model 防抖

防抖的作用在于:当您监听 model 数据并执行开销较大的操作时,可以让用户先输入完毕再触发 model 更新,而不是每次按键都更新。

model 防抖



加载状态

加载状态



输入掩码

您可以通过 mask 属性来强制或引导用户按照特定格式输入。

WARNING

掩码仅在 type 为 ‘text’(默认)、‘search’、‘url’、‘tel’ 或 ‘password’ 时可用。

以下是默认的掩码标记。如需自定义标记,请参阅下一节。

标记描述
#数字
S字母(a-z),不区分大小写
N字母或数字,字母不区分大小写
A字母,自动转为大写
a字母,自动转为小写
X字母或数字,字母自动转为大写
x字母或数字,字母自动转为小写

QInput 的 mask 属性有一些内置辅助格式完整列表。您可以直接使用它们(例如:“phone”、“card”),也可以编写自定义的掩码字符串。

基础用法



填充掩码



unmasked-value 在以下场景非常有用:比如您希望强制用户按照特定格式输入,但 model 数据中保存的是原始值(不含掩码字符):

无掩码 model



reverse-fill-mask 在以下场景非常有用:您希望用户从末尾开始填充掩码,并允许输入长度不固定:

反向填充掩码



自定义掩码标记
v2.18.4+

您还可以在默认标记的基础上定义自定义掩码标记,甚至覆盖部分或全部默认标记

自定义掩码标记的语法必须与默认标记一致。请注意,transform 属性是可选的。

自定义标记



使用第三方掩码处理器

您可以通过少量调整轻松将任何第三方掩码处理器与 QInput 配合使用。

假设您有这样一个 QInput:

<q-input
  filled
  v-model="price"
  label="Price with 2 decimals"
  mask="#.##"
  fill-mask="#"
  reverse-fill-mask
  hint="Mask: #.00"
  input-class="text-right"
/>

可以使用 v-money 指令:

<q-field filled v-model="price" label="Price with v-money directive" hint="Mask: $ #,###.00 #">
  <template v-slot:control="{ id, floatingLabel, modelValue, emitValue }">
    <input
      :id="id"
      class="q-field__input text-right"
      :value="modelValue"
      @change="e => emitValue(e.target.value)"
      v-money="moneyFormatForDirective"
      v-show="floatingLabel"
    />
  </template>
</q-field>
moneyFormatForDirective: {
  decimal: '.',
  thousands: ',',
  prefix: '$ ',
  suffix: ' #',
  precision: 2,
  masked: false /* doesn't work with directive */
}

或者使用 money 组件:

<q-field filled v-model="price" label="Price with v-money component" hint="Mask: $ #,###.00 #">
  <template v-slot:control="{ id, floatingLabel, modelValue, emitValue }">
    <money
      :id="id"
      class="q-field__input text-right"
      :model-value="modelValue"
      @update:model-value="emitValue"
      v-bind="moneyFormatForComponent"
      v-show="floatingLabel"
    />
  </template>
</q-field>
moneyFormatForComponent: {
  decimal: '.',
  thousands: ',',
  prefix: '$ ',
  suffix: ' #',
  precision: 2,
  masked: true
}

验证

内部验证

您可以通过 :rules 属性来验证 QInput 组件。可以指定内置规则数组或自定义验证函数。自定义验证函数需要在验证通过时返回 true,验证失败时返回包含错误信息的 String

TIP

出于性能考虑,默认情况下 rules 的变化不会触发重新验证,只有 model 数据变化时才会。如果您需要在 rules 变化时也触发验证,可以使用 reactive-rules 布尔属性。但这会带来一定的性能开销(因此请仅在确实需要时使用),可以通过将 rules 定义为计算属性(而非在模板中内联)来稍微缓解性能影响。

这样您就可以使用如下简洁的规则写法:

(value) => condition || errorMessage;

例如:

(value) => value.includes("Hello") || "Field must contain word Hello";

您可以通过调用 QInput 上的 resetValidation() 方法来重置验证状态。

QInput 的 rules 属性有一些内置辅助规则完整列表。您可以直接使用它们(例如:“date”、“time”、“hexColor”、“rgbOrRgbaColor”、“anyColor”),也可以编写自定义规则。

基础用法



最大长度



如果设置了 lazy-rules,验证将在首次失焦后才开始。如果将 lazy-rules 设置为 ondemand 字符串,则仅在手动调用组件的 validate() 方法或外层 QForm 提交时才会触发验证。

延迟验证规则



表单验证



异步规则

规则也支持异步,可以使用 async/await 或直接返回 Promise。

TIP

建议将异步规则与 debounce 属性搭配使用,避免每次按键都立即调用异步规则,这可能会影响性能。

异步规则



外部验证

您也可以使用外部验证,只需传入 errorerror-message 属性即可(需启用 bottom-slots 来显示错误信息)。

TIP

根据您的需求,可以将 Regle(我们推荐的方案)或其他验证库与 QInput 集成使用。

外部验证



您还可以自定义错误信息的插槽:

错误信息插槽



原生表单提交

当处理带有 actionmethod 的原生表单时(例如将 Quasar 与 ASP.NET 控制器一起使用),您需要在 QInput 上指定 name 属性,否则 formData 将不会包含该字段的数据:

原生表单