So the issue is the table. It is true that the field rules will ignore the required attribute of the field when it is hidden, but at the moment that particular functionality does not behave properly when the fields are within a table.
The issue you might have is that if you set a table column to "ignore" the value when hidden, it will often ignore ALL of the values in that column even if they are visible (this may be why you're getting the error).
I've worked around this behavior in two different ways.
Option 1
Use custom JavaScript to apply your own required attribute when the field is made visible instead of using the built-in required setting. The advantage here is that the field will not be flagged as required on the back end, but if it is visible the parsley validation will still apply and display the error if they try to submit without entering a value in the field.
Here is an example of the code I use to accomplish that
// set location as required when status column is updated
$('.reviewTable').on('change','.status select',function(e){
// get the table row when the status column changes
var row = e.target.id.match(/\d+/g)[1];
// get the target field for that row
var target = $('.location select').eq(row - 1);
// make column required if visible
target.attr('required',target.is(':visible'));
// reset validation message if location is hidden
if(target.is(':hidden')){
target.val('').change();
target.parsley().validate();
}
});
You could do this other ways. For example, you could just update every field in the column each time the table changes, but I prefer to only update the row that changed, especially when I have a lot of rows.
Option 2
Use the built-in required setting, but disable the backend validation. The problems with this approach is that you lose all of the backend validation entirely.
In either case, I think you'll need to Save the field values even when hidden to make it work properly, but it should be easy enough to test that before you determine if that is absolutely necessary.