我想禁用我的提交按钮,直到我的表格填写正确,这是我到目前为止:
<form>
<input type="text" class="form-control" v-validate="'required|email'" name="email" placeholder="Email" v-model="userCreate.userPrincipalName" />
<span v-show="errors.has('email')">{{ errors.first('email') }}</span>
<button v-if="errors.any()" disabled="disabled" class="btn btn-primary" v-on:click="sendInvite();" data-dismiss="modal" type="submit">Send Invite</button>
<button v-else="errors.any()" class="btn btn-primary" v-on:click="sendInvite();" data-dismiss="modal" type="submit">Send Invite</button>
</form>
字符串
上面的代码只会在我开始输入一个值之后打印一个错误消息并禁用我的提交按钮。我需要在开始与输入交互之前禁用它,这样我就不能发送空字符串。
另一个问题是,是否有比使用v-if
更好的方法来做到这一点?
编辑:
userCreate: {
customerId: null,
userPrincipalName: '',
name: 'unknown',
isAdmin: false,
isGlobalAdmin: false,
parkIds: []
}
型
9条答案
按热度按时间zwghvu4y1#
可能最简单的方法是使用
ValidationObserver
slot作为表单。像这样:字符串
更多信息-Validation Observer
yeotifhr2#
将按钮设置为
:disabled:"errors.any()"
将禁用按钮 after 验证。但是,当组件首次加载时,它仍然会启用。正如@im_tsm所建议的,在
mounted()
方法中运行this.$validator.validate()
会导致表单在启动时进行验证并立即显示错误消息。这种解决方案会导致表单看起来非常难看。此外,Object.keys(this.fields).some(key => this.fields[key].invalid);
语法超级难看。相反,当按钮被点击时运行验证器,在promise中获取有效性,然后在条件中使用它。使用这种解决方案,表单在启动时看起来很干净,但如果他们点击按钮,它将显示错误并禁用按钮。
个字符
验证程序API
r55awzrz3#
一种禁用按钮直到所有需要的值都被填充的方法是使用一个computed属性,该属性将返回bool,无论是否分配了所有值
范例:
创建一个计算属性,如下所示:
字符串
并将其绑定到html
disabled
属性:型
这意味着,如果
!isComplete
为true,则禁用该按钮此外,在您的情况下,您不需要两个if/else绑定按钮。您可以仅使用一个按钮来根据表单是否完成或有任何错误隐藏/显示它:
型
此按钮将被禁用,直到所有字段都已填写且未发现错误
yyyllmsg4#
另一种方法是使用v-validate.initial
字符串
这将在页面加载后执行电子邮件输入元素的验证。并在与输入交互之前禁用您的按钮。
de90aj5v5#
要检查表单是否无效,我们可以添加一个
computed
属性,如下所示:字符串
现在,如果你想在用户与任何字段交互之前立即开始检查,你可以在
mounted
生命周期钩子中手动验证:型
hfsqlsce6#
或使用计算
字符串
和使用
型
8i9zcol27#
适用于当前版本3(截至撰写本文时)。
第一步
确保表单字段可以被查看。
第二步
获取验证器示例
<ValidationObserver ref="validator">
的引用。第三步
每当表单字段更改时触发验证。
下面是一个例子:
个字符
2hh7jdfx8#
您可以添加计算属性
字符串
然后绑定到按钮上:
型
我在Vee-validate版本^2.0.3上尝试了这个方法
vxbzzdmp9#
对于任何人在这里寻找答案v4.x版本(Vue 3.0)
您可以使用
useForm
组合API或Form
组件对于
useForm()
组合API字符串
对于使用
slot
的Form
组件,型