$('.services').val() as per documentation, this returns the value from the first item in the list.
The solution (again) is to use a filter:
// returns the amount of empty service fields
$('input.services').filter( (i, e) => !e.value.trim() ).length
As a rule-of-thumb, if there is a list of any kind involved then in 90% of the cases map(), filter(), and/or reduce() are an essential part in solving the issue.
Side Note: you can interpret the length
property as a reducer:
length = list.reduce( l => ++l, 0 )