【发布时间】:2020-12-20 15:04:41
【问题描述】:
我有一个启用了提交阻止的表单:
<form method="get" :action="urls.baseUrl" ref="productsFilterForm" @submit.prevent>
表单提交按钮如下所示:
<button type="submit" @click="submitForm" class="btn">{{ translations['search'] }}</button>
提交表单功能:
submitForm() {
this.validateFilterValues();
let form = this.$refs.productsFilterForm as HTMLFormElement;
form.submit();
}
验证过滤器值:
validateFilterValues() {
for (const [key, filter] of Object.entries(this.filters))
filter.enabled = !(filter.value === null || filter.value === '' || filter.value == 0);
}
}
过滤数据如下所示:
private filters: Record<string, Input> = {
categories: { enabled: true, value: null },
productId: { enabled: true, value: null },
modificationId: { enabled: true, value: null },
title: { enabled: true, value: null },
barcode: { enabled: true, value: null },
status: { enabled: true, value: null },
descriptionStatus: { enabled: true, value: null },
supplierCode: { enabled: true, value: null }
}
过滤数据进入输入组件:
<input-component id="formProductId"
type="number"
name="productId"
:label="translations['product_id']"
:placeholder="translations['product_id']"
:enabled="filters.productId.enabled"
:value="filters.productId.value"
/>
输入组件如下所示:
<div class="form-element">
<label :for="id" :class="['form-element-title', { 'js-focused': focused }]">{{ label }}</label>
<input :id="id" :name="enabled ? name : false" v-model="inputData" type="text" :placeholder="placeholder" @focus="focused = true" @blur="focused = false">
</div>
表单提交工作,但有一个问题。如果输入为空,则 validateFilterValues 函数会删除输入的名称。如果我在提交之前 console.log 表单变量。我看到空输入的名称已被删除。但问题是这些输入仍然通过表单提交到后端。我在这里错过了什么?
另外,如果我在提交时使用验证方法 - 它工作正常:
<form method="get" :action="urls.baseUrl" @submit="validateFilterValues()">
但我需要将提交作为一个单独的函数并防止输入键表单提交。
【问题讨论】:
-
没有看到 validateFilterValues() 就很难知道它在做什么..
-
我添加了更多代码,希望现在更清楚。
-
您的问题是某些输入在验证后变得无名还是提交了这些无名输入?
-
他们应该变得无名,而且确实如此。但它们仍然是通过表单提交的。
-
您是否尝试过将值 false 替换为 undefined,如下所示: :name="enabled ? name : undefined" ?
标签: javascript vue.js vuejs2