如何启用/禁用bvalidator的2个实例

时间:2016-06-29 05:20:32

标签: javascript jquery validation

我确实有2个bvalidator实例(http://bmauser.github.io/bvalidator - 如果有人不知道的话)在我的表单上运行。

第一个实例验证所有表单,第二个实例部分验证但是相同的表单。

表单上有2个buttons

第一个按钮保存表单数据,如果它确实使用第一个实例验证它。

第二个按钮应该在第二个验证实例为真时保存表单。

但是,我无法弄清楚如何禁用一个实例并运行另一个实例。

例如,我的表单中有这个输入:

<input id="recordId" name="recordId" type="text"  value="$!currentmm.recordId" data-bvalidator="digit,required" data-bvalidator-modifier="myDigitsModifier" data-secondinstance="digit,required" data-secondinstance-modifier="myDigitsModifier" />

正如您所看到的,它有2个bvalidator实例。默认值:bvalidator和secondinstance。

我使用此代码:

$('#myForm').data('bValidator').destroy();  // I destroy the first instance     
$('#myForm').data('bValidators').secondinstance.validate(); //initialize the second instance                            
if ($('#myForm').data('bValidators').secondinstance.isValid()) {
//if the second instance is valid the do some job
}

但是id不起作用。当我销毁first实例时,它似乎销毁整个bvalidator instance ..

编辑:

例如,这是我表单的一部分,并且我为相同的输入框添加了2个bvalidator实例,其条件与bvalidation相同:

                   <h1><label style="width:350px;";>$i18n.getString( "marriage_record" )</label>
        <label style="font-size:8pt;";>$i18n.getString( "record_number" ) </label>
        <input id="recordId" name="recordId" type="text"  value="$!currentMarriage.recordId" data-bvalidator="digit,required" data-bvalidator-modifier="myDigitsModifier" data-secondinstance="digit,required" data-secondinstance-modifier="myDigitsModifier" class="dontcheck"/>
        <label style="font-size:8pt;width:200px;";>$i18n.getString( "registration_date" ) </label>
        <input id="registrationDate" name="registrationDate" type="text" value="$!vfh.formatDateForInput($!currentMarriage.registrationDate)" data-bvalidator="required"  data-secondinstance="required" class="dontcheck" />
        </h1> 

那么,我接下来在代码中做了什么:

点击第一个按钮后,我打电话:

$('#addMarriageRecordForm').data('bValidator').destroy();

我认为该调用会破坏bvalidator的第一个实例。然后我称之为:

$('#addMarriageRecordForm').data('bValidators').secondinstance.validate();

根据我的逻辑,现在它必须使用secondinstance验证表单,但不幸的是,一旦我销毁了bvalidator的第一个实例,它就会抛出错误。这就是我想要做的事情,多实例。

当前版本的bvalidator是否支持?我读了js代码,我想一旦我调用destroy函数它就会破坏bvalidator的所有实例..它的工作方式是什么?我认为如果我们可以根据需要禁用/启用某个特定的bvalidator实例,那应该是非常棒的。

1 个答案:

答案 0 :(得分:1)

您可以使用以下方式调用验证:

$('#button1').on('click', function() {
    if ($('#myForm').data('bValidator').validate()) {
       // save form
       ...
    }
}

如果您需要在验证后提交表单,则可以对data-secondinstance-option-validate-on-submit="false"元素上具有data-bvalidator-option-validate-on-submit="false"<form>属性的实例的提交事件禁用验证。如果#button1是提交按钮,则代码可以是:

var skipFirstInstance = false;

$("form").submit(function(e) {       

    if(skipFirstInstance)
        return;

    if ($('#myForm').data('bValidator').validate()) {
       // save form
       ...
    }
    else{
        e.preventDefault();
    }
});

$('#button2').on('click', function() {
    if ($('#myForm').data('bValidators').secondinstance.validate()) {
       // save form
       ...
       // disable first instance validation
       skipFirstInstance = true;

       // submit the form
       $('form').submit();
    }
}