使用jQuery的.val()设置输入字段值时,Bootstrap验证器无法正常工作。

10

我有一个表单,其中有这个字段:

<form id="formdelivery" class ="form-horizontal form-custom">
    <fieldset>
        <input name="delivery" type="text" class=""  value="">
    </fieldset>
</form>

通过点击按钮,可以将输入字段的值从另一个输入字段复制:

   $('#copy').click(function () {
        $('[name=delivery]').val($('[name=billing]').val());
        var res = $('#formdelivery').data('bootstrapValidator').validate();
        if (res.$invalidFields.length == 0) {
            alert("ok");
        }
        else {
            alert("no");           
        }
    });

该字段所应用的验证规则如下:

$('#formdelivery').bootstrapValidator({
       fields: {
            delivery: {
                message: 'Invalid',
                validators: {
                    notEmpty: {
                    },
                    stringLength: {
                        min: 2,
                        max: 100,
                        message: 'you need almost 2 chars and not more than 100'
                    }
                }
            }
});

问题在于点击复制按钮后,Bootstrap验证器忽略了使用jQuery代码复制的新值$('[name=delivery]').val($('[name=billing]').val());

我是否做错了什么或者这是一个问题?

4个回答

9

正如Youness建议的那样,我在更新输入内容后添加了$('[name=delivery]').change();以进行验证。

然后,我在Bootstrap验证器初始化中添加了触发器行:

$('#formdelivery').bootstrapValidator({
       fields: {
            delivery: {
                trigger: 'change keyup',
                ...

这样可以在更改事件上进行验证。


你能在HTML标签中添加这个吗? - Maxrunner
我认为无法从HTML标签触发它。 - kiks73
2
你救了我的命...! - Tejas Mehta

4

在你添加值之后,尝试加入以下内容:

 $('[name=delivery]').change();

没有任何改变,也没有添加change()。似乎验证仅在第一次按下按钮时完成。之后,更改值并再次按下按钮后,验证状态不再更新。 - kiks73

2

设置完值后,只需在表单上调用revalidateField($field),同时在使用html属性数据-bv-x进行验证时也适用。


1
在HTML5中添加data-bv-trigger:
<input name="delivery" type="text" class=""  value="" data-bv-trigger="change keyup">

在您编程更改值后,触发“change”事件:
$('[name=delivery]').change();

对我来说,需要使用 data-bv-trigger="change keyup"。你救了我的一天!谢谢。 - Puneet Pandey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接