Moved has_changed logic from widget to form field

Refs #16612. Thanks Aymeric Augustin for the suggestion.