【问题标题】:How to limit the input length on a v-select element?如何限制 v-select 元素的输入长度?
【发布时间】:2019-05-29 14:16:51
【问题描述】:

我在我的项目中使用了 Vue-select 功能,并且在 v-select 元素中我想设置最大输入长度(45 个字符),但我没有这样做。我设法在后端处理了这个问题,但我想防止用户输入超出允许范围的内容。

我尝试使用属性 :maxlength="45" 但它似乎对输入长度完全没有影响。

这是我所拥有的:

<div class="form-group">
    <div class="row">
        <div class="col-xs-8">
            <v-select taggable pushTags :maxlength="maxlength" v-model="lote" :options="lotes" @input="selecionarLote" >
                <span slot="no-options">Digite o nome de um lote e clique "Enter" para adicionar...</span>
            </v-select>
        </div>
        <div class="col-xs-4">
            <label class="control-label">Descarte</label>
            <p-switch v-model="descarte" type="primary" on-text="SIM" off-text="NÃO"></p-switch>
        </div>
    </div>
</div>

selecionarLote() {
    let vm = this;
    if (this.lotes.length) {
        if (!this.lote || !this.lote.label) return;

        if (this.lote.label.length > 45) {
            this.lote.label = this.lote.label.substring(0, 45);
        }

正如我所说,我可以处理超过 45 个字符的输入,但我想阻止它,就像这段代码一样:https://codepen.io/CSWApps/pen/RQbvvp,我搜索了 vue-select 文档并且无法找到限制输入长度的方法。

提前感谢您的帮助。

--------------- 编辑 ----------

我尝试使用迈克尔的答案,但我仍然可以输入超过 45 个字符:

  data() {
    return {
      maxlength: [v => v.length < 45 || "Sorry you have exceeded the max length of input"],
      lote: null,
      descarte: false,
      modelValidations: {
        requiredText: {
          required: true
        }
      }
    };
  }
      <div class="form-group">
        <div class="row">
          <div class="col-xs-8">
            <v-select taggable pushTags :rules="maxlength" v-model="lote" :options="lotes" @input="selecionarLote" >
              <span slot="no-options">Digite o nome de um lote e clique "Enter" para adicionar...</span>
            </v-select>
          </div>
          <div class="col-xs-4">
            <label class="control-label">Descarte</label>
            <p-switch v-model="descarte" type="primary" on-text="SIM" off-text="NÃO"></p-switch>
          </div>
        </div>
      </div>

【问题讨论】:

    标签: javascript html node.js vue.js vue-select


    【解决方案1】:

    你需要给它提供v-select的props之一,在这里你可以像这样使用rules

    <v-select taggable pushTags :rules="maxlength" v-model="lote" :options="lotes" @input="selecionarLote" >
                    <span slot="no-options">Digite o nome de um lote e clique "Enter" para adicionar...</span>
                </v-select>
    
    data(){
      return {
        maxlength: [v => v.length < 45 || "Sorry you have exceeded the max length of input"]
       }
    
    

    【讨论】:

    • 嗨,Michael,感谢您的回复,我尝试按照您的建议进行操作,但仍然可以输入超过 45 个字符,我编辑了原始帖子并修改了代码。
    • 当输入超过 45 个字符时,您应该会在 v-select 下方看到一条错误消息。如果您想阻止用户提交表单,那么您可以编写一个检查提交并显示错误消息的函数。如果你想真正阻止用户输入,那么你需要编写一个函数来监视 v-select 的值,如果大于 45 则拼接第 46 个字符。希望这会有所帮助,请参阅此处查看我找到的示例:codepen.io/nelxaz/pen/xLemZB
    • 嗨迈克尔,再次感谢您的回答。我真的是 vuejs 和 javascript 的新手,我用你发布的例子来试验如何去做,我设法做了一个手表,看看输入长度是否大于 10 并改变它,但你能给我提示吗如何将我对电子邮件字段所做的更改返回到输入字段?我所做的方式根本不会影响电子邮件输入字段。这是您随我的更改提供的代码笔示例:codepen.io/GilbertoVGL/pen/mYzYdY> 再次感谢
    • 因此,您需要使规则反映出这一点,以便将警告消息放入与电子邮件“名称”相同的规则中,如下所示:emailRules: [ (v) =&gt; v &amp;&amp; v.length &lt;= 10 || 'Email must be less than 10 characters' //right now you have this: (v) =&gt; !!v || 'E-mail is required' ],
    • 我自己好像没有解释清楚,我想在达到 10 个字符后阻止输入,可以吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2019-06-23
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多