Hi,
I have found a few threads on answers where with JS to identify if a row is duplicate, works great. I however have additional question. From the code below, how do I change it to auto delete a table row if it is a duplicate?
myTable can be replaced with actual table CSS and myField the actual CSS of the drop down field in the table. This displays a message when a duplicate is identified, but the table that I populate has hidden fields which won't be used on the initial step. At a different step, the hidden fields will be displayed and potentially there will be duplicate values, these values needs to be removed to make the table unique. There will only be 1 field, a drop-down field. This table will also be hidden from the user, but the unique value per row will be required to do some other functions.
$(document).ready(function(){
// assign validator to initial rows
assignValidator();
// re-validate when a row is added or removed
$('.services').on('click','.cf-table-add-row, .cf-table-delete',function(){
assignValidator();
});
});
function assignValidator(){
// add unique validator
$('.myTable .myField select').attr('data-parsley-uniqueselection','');
// trigger validation on all rows when a row changes
$('.myTable .myField select').off('change',validateSelection).on('change',validateSelection);
}
function validateSelection(){
// revalidate the column if the value is not empty
$('.myTable .myField').each(function(e){
if($(this).val() != ''){
$(this).parsley().validate();
}
});
}
window.Parsley.addValidator('uniqueselection', {
validateString: function(value, requirement, field) {
// return a list of all column values
var valueList = field.$element.closest('.myTable').find('.myField select').map(
function() {return $(this).val().trim(); }).get();
// return the result of a filter for more than 1 match for the current field value
return _.filter(valueList, function(v) { return v == value }).length == 1;
},
messages: {
en: 'Duplicate selection.',
}
});
Thanks