我想要实现的是为Parsley编写自定义验证器以验证输入中的多个电子邮件地址条目。
<input class="tags tags-email" type="hidden" value="" id="tags" data-validation-minlength="1" data-trigger="keyup" data-parsley-testmultiple/>
window.ParsleyConfig = {
validators: {
testmultiple: {
fn:function(value) {
console.log("OK");
var re = new RegExp(/^regexText);
var val = value.val();
var tagsArray = val.split(',');
var lastTag = tagsArray[tagsArray.length -1];
console.log('keyup OK');
if(!re.test(lastTag)) {
return false;
}
return true;
}
},
priority: 32
},
messages: {
testmultiple: "This value can not contain dollar sign ($)."
}
};
function initUser() {
$(".tags").select2({tags: frd.emailList, width: '100%'});
$('form').parsley();
}
<script src="components/validation/bsa-validation.js" type="text/javascript"></script>
<script src="bower_components/parsleyjs/dist/parsley.js" type="text/javascript"></script>
我正在使用AngularJS,我的自定义验证器永远不会触发。有什么想法吗?
答案 0 :(得分:0)
不要使用multiple
,它已被欧芹使用过。
答案 1 :(得分:0)
我更新了这样的html :(输入类型是“隐藏”废弃逻辑)
<input class="tags" type="text" value="" id="tags" data-parsley-tagsemailvalidation="2" data-parsley-trigger="change"/>
我更新了自定义验证器:(自定义验证器命名很重要。不要使用camelCase。所有名称必须小写。)
window.ParsleyConfig = {
validators: {
tagsemailvalidation: {
fn: function (value, requirement) {
var re = new RegExp(/regexText/i);
var returnValue = true;
var tagsArray = value.split(',');
//var lastTag = tagsArray[tagsArray.length -1];
var index;
for(index = 0; index < tagsArray.length; index++) {
if(!re.test(tagsArray[index])) {
returnValue = false;
if(index == tagsArray.length - 1) {
var tagsInput = $('.select2-search-field').prev();
tagsInput.css('border', '1px solid red');
}
}
}
return returnValue;
},
priority: 32
}
},
i18n: {
en: {
tagsemailvalidation: 'You have wrong email adresses. Please fix it'
},
tr: {
tagsemailvalidation: 'Kırmızı olarak belirtilmiş eposta adresleri hatalı'
}
}
};