【问题标题】:Vuetify combobox - How to disable typing in vuetify's comboboxVuetify 组合框 - 如何禁用在 Vuetify 组合框中输入
【发布时间】:2020-01-26 07:25:26
【问题描述】:

vuetify 组合框允许用户在组合框中输入内容。有关如何禁用此功能的任何线索。

这就是我实现组合框的方式。

<v-combobox
:loading="isSurveyBeingPopulated"
class="static--inputs"
color="red"
box
:items="folders"
:rules="[rules.required]"
item-text="value"
dense
placeholder="Select Survey Folder"
item-value="key"
slot="input"
v-model="selectedSurveyFolder">
</v-combobox>

【问题讨论】:

    标签: vue.js combobox vuetify.js


    【解决方案1】:

    组合框:

    v-combobox 组件是一个 v-autocomplete,它允许用户 输入提供的项目中不存在的值。已创建 项目将作为字符串返回。

    所以如果你想禁用输入,你应该使用一个选择:https://vuetifyjs.com/en/components/selects

    选择字段组件用于收集用户提供的 选项列表中的信息。

    【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我用 v-select 代替了 v-combobox,效果很好:

    <v-select
      return-object
    ></v-select>
    

    【讨论】:

    • 问题是我想用额外的东西渲染项目,所以我想要 Combobox 但不想打字
    【解决方案3】:

    您可以在更改后删除新项目。

    <v-combobox
        v-model="selected"
        :items="[...selected, ...items]"
        multiple
        @change="onChangeCombobox"
    />
    
    onChangeCombobox(items) {
      this.selected = items.filter((item) => this.items.includes(item))
    }
    

    【讨论】:

      【解决方案4】:

      我也经历过同样的事情,我需要组合框来列出项目和自定义值,但我必须禁用输入,我的解决方案是使用关键事件并“改变”它的行为,例如:

          @keydown="$event.target.blur()"
          @keypress="$event.target.blur()"
          @keyup="$event.target.blur()"
      

      【讨论】:

        【解决方案5】:

        是的,你可以通过使用规则代码来实现对组合框的过滤,例如

          <v-combobox
            v-model="selection"
            :items="items"
            :search-input.sync="input"
            :rules="intRule"
            chips
            clearable
            dense
            multiple
            small-chips
            item-text="title"
            autocomplete="off"
            return-object
          >
          </v-combobox>
        

        然后在你的脚本部分的数据中,...

        data() {
            return {
              selection: [],
              input: null,
              items: [],
              valid: false,
              intRule: [
                function(v) {
                  if (!v || v.length < 0) {
                    return false
                  } else if (v.length > 0) {
                    for (let i = 0; i < v.length; i++) {
                      if (/[^0-9]/g.test(v[i].id)) {
                        v.splice(-1, 1)
                        return false
                      }
                    }
                    return false
                  } else {
                    return true
                  }
                }
              ]
            }
          }
        

        input 可用于覆盖无结果槽并显示未找到结果的输入。

        希望对你有所帮助

        【讨论】:

        • 问题是关于完全不同的东西 - 如何禁用打字。
        • > 但是,如果您仍然希望能够过滤但不能添加新文本怎么办? ...这就是这个问题的答案
        • @silvan 从字面上看,如果您不希望用户在那里输入,图书馆会告诉您使用 v-select 而不是 v-combobox 大声笑
        • ... 在 v-select 中无法通过键入进行过滤。 vuetifyjs.com/en/components/selects/#selection 但是是的,现在你最好去这里:vuetifyjs.com/en/components/autocompletes/#props
        猜你喜欢
        • 2021-07-10
        • 2020-05-23
        • 1970-01-01
        • 1970-01-01
        • 2021-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-14
        相关资源
        最近更新 更多