2016-11-10 120 views
0

目前我有兩個自定義驗證器觸發另一個,我只需要顯示其中一個驗證器的錯誤消息。Parsley JS - 禁用單個驗證器的消息

我知道你可以用data-parsley-errors-messages-disabled禁用所有消息,但是有沒有辦法在Parsley中禁用個別驗證器的消息?

在這裏看到的例子 - http://jsfiddle.net/tp9esyt0/1/


JS:

window.Parsley.addValidator('ccexp', { 
    validate: function(values, id) { 
    if($('#' + id + '_month').val() == '' || $('#' + id + '_year').val() == '') { 
     return false 
    } 

    return true 
    }, 
    messages: { 
    en: 'Please provide both month and year' 
    } 
}) 

window.Parsley.addValidator('ccexpLink', { 
    validate: function(values, id) { 
    $('#' + id + '_month').parsley().validate() 
    return $('#' + id + '_month').parsley().validate() == true ? true : false 
    }, 
    messages: { 
    en: ' ' // <-- Howto disable this message completley 
    } 
}) 

$('#myform').parsley().on('form:submit', function() { 
    return false 
}) 

HTML:

<form id="myform"> 
<select name="month" id="exp_month" data-parsley-validate-if-empty data-parsley-trigger="change" data-parsley-ccexp="exp"> 
    <option value="" selected="selected"></option> 
    <option value="01">01 - Jan</option> 
    <option value="02">02 - Feb</option> 
    <option value="03">03 - Mar</option> 
    <option value="04">04 - Apr</option> 
    <option value="05">05 - May</option> 
    <option value="06">06 - Jun</option> 
    <option value="07">07 - Jul</option> 
    <option value="08">08 - Aug</option> 
    <option value="09">09 - Sep</option> 
    <option value="10">10 - Oct</option> 
    <option value="11">11 - Nov</option> 
    <option value="12">12 - Dec</option> 
</select> 
<select name="year" id="exp_year" data-parsley-validate-if-empty data-parsley-trigger="change" data-parsley-ccexp-link="exp"> 
    <option value="" selected="selected"></option> 
    <option value="2016">2016</option> 
    <option value="2017">2017</option> 
    <option value="2018">2018</option> 
    <option value="2019">2019</option> 
    <option value="2020">2020</option> 
    <option value="2021">2021</option> 
    <option value="2022">2022</option> 
    <option value="2023">2023</option> 
    <option value="2024">2024</option> 
    <option value="2025">2025</option> 
    <option value="2026">2026</option> 
</select> 
<input type="submit" /> 

+0

爲什麼要在「ccexpLink」自定義驗證器中調用validate()? –

+0

除了觸發'ccexp'驗證程序外'ccexpLink'驗證程序不需要做任何其他操作,因爲這兩個字段相互依賴。我願意提供更好的方法 – Fyrebase

回答

0

一種更好的方法是將兩個字段的包裝都視爲您將自定義驗證附加到的字段。我希望這是正式的,但還沒有完成。檢查this example

另一種替代方法是確保第二個字段中的更改觸發第一個字段中的驗證。目前還沒有內建的方法可以做到這一點,但您可以手動完成,例如:

$('.second-field').on('input', function() { 
    $('.first-field').trigger('input') 
})